Full-Stack Platform

Sirenbase

Built for a working coffeehouse, this modular platform replaces fragmented daily workflows with fast, accountable digital operations.

0.0months
0commits
0tests
0tools

Next.js · React · TypeScript · Tailwind CSS · ShadCN/Radix · Flask · SQLAlchemy · PostgreSQL · JWT · Vercel + Render + Neon

The Problem

Daily friction that adds up

Working in a coffeehouse exposes daily processes that silently drain time and energy. Ordering, counting, and restocking rely on outdated, repetitive workflows — tasks that feel simple but stack up into constant friction.

Inventory Ordering

Daily ordering lacks a reliable source of truth. Inventory changes throughout the day without shared visibility, forcing partners to compensate with time, repetition, and caution. What should be a straightforward decision becomes a recurring liability.

Milk Ordering

Daily milk orders rely on slow, manual processes that pile up frustration and errors. Partners track totals, carry numbers forward, and calculate orders by hand every day, turning a routine task into repetitive friction.

Display Restocking

Daily restocking depends on repeated checks and back-and-forth trips, as missing items are easy to overlook. Partners spend time verifying what’s needed instead of acting, turning a routine task into a slow, frustrating cycle.

The Solution

Three tools, one platform

A Next.js frontend backed by a Flask REST API and PostgreSQL database. Partners log in once and access all three tools from a central dashboard. The dashboard doubles as an operational overview — surfacing milk order progress and time since the last restock so partners know what’s done and what’s overdue without opening each tool.

Tool 01

Inventory Tracking

Inventory Tracking preview
Tool 02

Milk Order

Milk Order preview
Tool 03

RTD&E Counting

RTD&E Counting preview
Admin

Dashboard & Admin

Dashboard & Admin preview

01

Inventory Tracking

A shared, real-time inventory system that gives every partner immediate visibility into current stock. Items are identified by unique 4-digit codes written directly on them for fast physical lookup. A single search field queries across names, codes, and categories. Every add and remove is logged with ownership and timestamp, creating a persistent audit trail.

02

Milk Order

A structured daily workflow that walks partners through each counting phase in sequence — no steps can be skipped, no math is done by hand. The system collects stock levels from multiple locations, handles all calculations automatically, and logs every completed session. Par levels are admin-configurable.

03

RTD&E Counting

A guided restocking workflow that presents items one at a time, compares counts against par levels, and generates a pull list with exact quantities. Partners count what’s on the display — the app tells them what to pull. Sessions expire after 30 minutes to prevent stale data from carrying over.

Impact

What changes on the floor

Every tool targets a specific daily bottleneck I experienced firsthand. The improvements below are based on the actual workflows I performed and timed against the original processes.

Inventory Tracking

3x

more efficient

2–3 trips

to verify stock per order

Uncertain

order accuracy

None

changes tracked

Milk Order

4x

more efficient

10–15 min

per daily count

3 systems

steps to complete

Manual

calculations

RTD&E Restocking

3x

more efficient

~5 min

per restock cycle

Repeat trips

to restock

None

tracked

Technical Decisions

Architecture shaped by constraints

The architecture behind Sirenbase was shaped by one constraint: this platform needed to support multiple independent tools without any of them interfering with each other — and it needed to be built in a way where adding a fourth tool wouldn’t require touching the first three.

Every tool is isolated at every layer. The backend uses separate Flask Blueprints with prefixed routes (/api/tracking/*, /api/milk-order/*, /api/rtde/*). The database uses prefixed tables per tool (tracking_items, milk_order_sessions, rtde_count_sessions) sharing only a central users table. The frontend mirrors this with nested route trees under /tools/. Authentication, UI components, and the design system are shared — everything else is namespaced. This wasn't how the project started. Migration #3 renamed the original tables to add the tracking_ prefix — the moment the architecture shifted from single-tool to multi-tool.
Before writing components, I wrote the rules they'd follow. Six modular design documents define the system: tokens (OKLCh color space, typography, spacing), component patterns, dialog behaviors, layout structure, tool-specific UI characteristics, and accessibility standards. Performance budgets are defined (page load under 2s, 60fps animations). Touch targets are specified at 44px minimum with 8px gaps. Animation durations are standardized across four tiers. The design system isn't a style guide — it's the spec sheet the entire frontend was built against.
Testing wasn't added after the fact — it was a requirement defined in the project's development guidelines. Features without tests are explicitly marked incomplete. The 226 backend tests cover authentication, CRUD operations, session state transitions, calculation accuracy, role-based access enforcement, and edge cases like expired sessions and duplicate entries. Every test runs against a real database with full isolation — create_all() and drop_all() bracketing per test, no shared state, no interdependencies.
The RTD&E counting interface updates on every tap — partners are counting items quickly and shouldn't wait for network round-trips. Counts save automatically on a 500ms debounce, with the UI updating optimistically before the API confirms. A saving indicator displays for a minimum of 800ms so it doesn't flash and disappear. If the save fails, the count reverts. Arrow keys navigate between items. The goal was an interface that feels instant even on a slow connection.
Next.jsReactTypeScriptTailwind CSSShadCN / RadixFlaskSQLAlchemyPostgreSQLJWTVercelRenderNeon

Methodology

Built with AIClaude AI

Sirenbase/
├── Design/
├── README.mdRead before all UI work
├── tokens.mdColors, typography, spacing
├── components.mdButtons, cards, forms
├── dialogs.mdModal/dialog patterns
├── layout.mdPage structure, scrolling
├── tool-specific.mdPer-tool UI
├── tool-redesign-guide.mdRedesign workflow
└── accessibility.mdWCAG, performance
├── Planning/
├── PLANNING.mdMulti-tool system design
├── InventoryTracking.mdTool 1 spec
├── MilkOrder.mdTool 2 spec
├── RTDE.mdTool 3 spec
└── Deployment.mdInfrastructure plan
├── ChangeLog/
├── MULTI_TOOL_ARCHITECTURE.md
├── CATEGORY_FIELD_DECISION.md
├── DOCKER_DECISION.md
├── SQLITE_TESTING_CONFIG.md
├── AUTOCOMPLETE_FEATURE.md
└── ARCHITECTURAL_CHANGES_RULE.md
├── frontend/
└── CLAUDE.mdFrontend rules (584 lines)
├── backend/
└── CLAUDE.mdBackend rules (907 lines)
├── TASKS.mdOrganized by tool and phase
├── BUGS.mdAll bugs with IDs and status
└── CLAUDE.mdProject rules (566 lines)

Looking Forward

What I'd build next

IMS Integration for Milk Order

The milk order workflow currently requires partners to manually enter on-order quantities from the store’s Inventory Management System. With direct IMS access, those numbers would populate automatically — removing a manual step and eliminating transcription errors. Combined with the existing count data and par levels, the system could then calculate and pre-fill the final milk order automatically.

CI/CD Pipeline

The 226 tests exist but run manually. A GitHub Actions pipeline would gate every push to main and enforce the testing discipline that’s currently a convention into an automated requirement.

About me

Precise and fast-learning software engineer with experience in Python, JavaScript, Typescript, React, Next, Flask, SQL databases, SQLAlchemy, APIs, AWS Cloud Services, TailwindCss and MaterialUI. Adept at designing, developing, and troubleshooting full-stack applications, with a focus on responsive design, data security, and scalable solutions. Known for a blend of technical expertise, problem-solving skills, and an adaptable mindset.

Profile Picture

© 2025 John John Penafiel. All Rights Reserved. Build with Next.js, Typescript, and TailwindCSS. 🛠️