Catalogue
Projects
A catalogue of everything I have built, with the stack behind each project.
- Full-Stack01SmartStockInventory ledger and demand forecasting for warehouse operations
Warehouse inventory built around an auditable stock ledger, with a nightly job that fits a per-product OLS regression and backtests it using WAPE, MAE, MAPE and RMSE.
- Laravel 12
- Inertia.js
- Vue 3
- OLS Linear Regression
- PHPUnit
- 505-test PHPUnit suite on in-memory SQLite, covering ledger invariants, authorization boundaries and the regression maths.
- Every stock mutation funnels through one transactional service that locks the product row, making the stock balance invariant structural rather than a convention.
- Nightly ETL chains aggregation and per-product regression with Bus::chain(), then scores past forecasts on WAPE, MAE, MAPE, RMSE and bias.
- Two frontend-guard tests parse every .vue file, catching unbound identifiers that Vite transpiles silently and that would otherwise fail only in the browser.
- Full-Stack02Event4UOnline event ticketing with Midtrans payments and QR e-tickets
Event ticketing with guest checkout, Midtrans payments and QR-coded e-ticket PDFs. Led a five-person team across product, development and QA, authoring 97 of 125 commits.
- Laravel 12
- Midtrans Snap API
- QR Code E-Ticket
- Docker
- GCP Cloud Run
- Led a five-person team as product owner, full-stack developer and QA, authoring 97 of the 125 commits.
- Guest checkout alongside registered accounts — a buyer never has to create an account to complete a purchase.
- Payment lifecycle handles the awkward parts: time-limited orders, a scheduled orders:clean-expired pass that expires overdue pending payments inside a transaction, and webhook-driven status updates.
- Multi-stage container image (php:8.2-fpm build to php:8.2-fpm-alpine runtime) with nginx and supervisor running app, queue worker and log viewer as separate processes.
- Backend / Cloud03RefCheckerReference metadata verification with streaming results across three academic APIs
Next.js tool that detects APA, Harvard, IEEE and MLA citations, normalises them, and matches them against Crossref, OpenAlex and Semantic Scholar. Results stream back as newline-delimited JSON, so each reference appears the moment it is verified rather than after the whole batch.
- Next.js
- React
- TypeScript
- Crossref API
- OpenAlex API
- Semantic Scholar API
- Vitest
- Vercel
- NDJSON Streaming
- Streaming NDJSON verification endpoint (application/x-ndjson) that emits each result as it completes, so a batch of twenty references never blocks on the slowest one.
- Chained provider fallback across Crossref, OpenAlex and Semantic Scholar, with 429 retry on Crossref, behind a single academic-provider interface.
- Zero runtime dependencies beyond React and Next.js — the citation parser, style detector, matcher and CSV writer are all first-party.
- Confidence scoring grounded in field-level evidence, including journal abbreviation handling (J. versus Journal) and explicit detection of contradictions between sources.
- Backend / Cloud04BizzaTrip APIMulti-day travel itinerary API bridging an ML route optimiser to an Android app
Backend service for the Day Trips Optimization capstone. Turns a traveller's chosen destinations and trip length into a day-by-day itinerary by calling a separately deployed clustering model, then serves plans and destination data over a versioned REST API on Cloud Run.
- Node.js
- Express.js
- Firebase Auth
- Cloud Firestore
- Google Maps Places API
- Google Cloud Storage
- Cloud Run
- Docker
- Backend division of a five-person capstone team, authoring 27 of the repository's 58 commits alongside the team lead.
- Bridges three separately deployed services — an ML route-optimisation endpoint, a Firebase Auth and Firestore backend, and an Android client — behind one versioned REST API.
- Validates itinerary input before spending an ML call, then fails explicitly when the model returns no routes rather than persisting an empty plan.
- Deployed on Cloud Run with a containerised Node 20 image and fail-fast startup: the service refuses to boot if any required credential is missing.
- Full-Stack05Iuran WargaNeighbourhood dues and expense ledger with Excel and PDF reporting
Coursework project for tracking residential dues, expenses and neighbourhood records, with Excel and PDF export across every entity. Built by a team of five; I owned the reporting layer, the tagihan (billing) feature and the dashboard filters.
- Laravel
- Blade
- Laravel Excel
- DomPDF
- Tailwind CSS
- Vite
- Built the Excel export layer for every entity — warga, tagihan, lingkungan and neighbourhood records — using Laravel Excel.
- Implemented the tagihan (billing) feature end to end, including filters that showed only approved charges in the income chart.
- Added a PDF export for payment records via Blade-to-Dompdf templates.
- Authored 13 commits as one of five members on the team repository.