Academic Capstone Project
Professional Diploma in Software/Web Development
Nur Azhar
Candidate, Lithan Academy (July 2026)
Core Deliverable: Final Graduation Project
About TasteLocal
TasteLocal is a modern hyper-local culinary exploration and directory application designed to bridge the gap between travelers, local foodies, and Singapore's heritage dining scene. Built as a self-contained, high-performance web platform, it includes comprehensive search/filter capabilities, a live table booking engine, customized user itineraries, and multi-tier role dashboards.
Advanced System Architecture
Clojure Backend
Engineered with Babashka (Clojure-JVM) leveraging Ring specifications and HTTP Kit for lightweight, fast HTTP request processing with functional programming elegance.
HTMX Interactivity
Utilizes hypermedia-driven interfaces. Accomplishes modern dynamic SPA reloads and real-time state changes with zero-JavaScript client-side compile bundles.
Dual-Mode DB
Features a dual-mode engine. Automatically seeds an embedded SQLite engine on boot, with seamless support for switching to a production PostgreSQL database via system environment URLs.
Security & RBAC
Enforces custom-built session management with OpenSSL-compatible cryptography and secure hashing, safeguarding role-based workflows for different user tiers.
🔑 Hiring Manager Sandbox Credentials
Skip standard sign-up steps! Log in instantly with any of the pre-seeded role credentials below to explore custom workflows:
| System Role | Username | Password | Core Capability |
|---|---|---|---|
| Tourist / Foodie | tourist | password | Plan itinerary, book dining, add reviews |
| Vendor / Business | vendor | password | Manage reservations, update status |
| System Admin | admin | password | Moderate and delete listings & reviews |
🛠️ Production Post-Mortem: Overcoming the Clojure Parenthesis Odyssey
Software development in a production containerized environment is rarely an effortless, straight line. As part of deploying this capstone portfolio, the live server encountered an HTTP 503 'Upstream Connection Failure' due to a subtle syntax mismatch in this very view file. Below is the operational sequence utilized to resolve the issue systematically:
1. Telemetry Isolation via Temporal Filters
By applying ISO-8601 temporal logs filtration to the Northflank deployment streams, we successfully isolated stale proxy cache records from active runtime diagnostics. This revealed a compile-time crash inside the Babashka SCI parsing engine: Unmatched delimiter: ], expected: ) to match ( at [9 5].
2. Deterministic Lisp Tracer Static Analysis
Rather than trial-and-error debugging, we wrote and executed a deterministic Clojure/Babashka tracer script that scanned the file character-by-character, mapping bracket depths. The parser proved that the Hiccup [:div.container] vector remained unclosed, leaving the trailing parentheses orphaned.
3. Mathematical Realignment & Immediate Recovery
Aligning the nesting blocks precisely to ]]]]))) instantly balanced the AST. The container compiled successfully, seeded the SQLite DB on boot, bound to internal port 8080, and served the page you are reading now. This demonstrates a deep competency in container instrumentation, telemetry routing, and system recovery.