Jul 21 – Jul 27, 2026 · Sprint goal: close all P1 & P2 gaps, ship P3 OAuth
Jul 28 – Aug 3, 2026 · Sprint goal: Post & Sharing, Manage Branches & Items
Aug 4 – Aug 10, 2026 · Sprint goal: Phase 2 — Engagement, Loyalty & Community
The But First Coffee (BFC) delivery app is a full-stack, mobile-first progressive web application built for the Philippines market. The core ordering pipeline — user authentication, menu browsing, cart management, order placement, and real-time order tracking — is fully operational. The platform successfully handles end-to-end order flows, WebSocket-driven live status updates, AI-assisted chat support, and geolocation-based address selection.
As of this audit, 26 of 28 Phase 1 features are fully operational; 2 admin screens (Stores, Settings) are UI-complete but pending API wiring. The storeadmin standalone staff PWA is fully shipped with 8 features. Phase 2 has 1 of 8 features live (community posts); 7 remain pending.
The customer app is at bfc.webtour.ph. The staff admin panel is at storeadmin.webtour.ph. Android APK available at bfc-docs.webtour.ph/app-debug.apk. Backend: apigateway.webtour.ph.
| Total Features Scoped | 28 |
| ✓ Implemented | 26 |
| ⚠ Partial (UI done, no API save) | 2 |
| ✗ Not Started | 0 |
| Overall Completion | 93% |
26 features fully implemented and API-connected. 2 admin screens are UI-complete, pending API wiring.
Email/password login with JWT access + refresh tokens. Tokens persisted to localStorage. Auto-redirects authenticated users away from login page.
api/auth.ts
store/authStore.ts
Full name, email, and password signup. Client-side validation (min 6 chars, password match check). Auto-login via JWT after successful registration.
pages/auth/Register.tsx
Browse and order without an account. Guest flag stored in localStorage. Full app access granted with a guest user object (id: 0, name: "Guest").
store/authStore.ts
ProtectedRoute redirects unauthenticated users to /login. GuestRoute redirects authenticated users away from auth pages back to home.
routes/ProtectedRoute.tsx
routes/GuestRoute.tsx
Responsive grid of all menu items across 9 categories. Category tabs + real-time client-side search filtering via useMemo. No page reload required.
pages/Menu.tsx
data/menu.ts
Bottom-sheet modal with size selector (S/M/L + price delta), quantity input, and sugar-level customization (0–100%). Sends full metadata to cart API.
components/menu/AddToCartModal.tsx
Full CRUD via REST API (GET, POST, PATCH qty, DELETE item, DELETE /cart). Cart badge shows live item count. Two-column layout on desktop.
context/CartContext.tsx
api/cart.ts
POST /orders with full item payload and total. Shows loading spinner during API call. Clears cart on success and redirects to Order History.
pages/Cart.tsx
api/orders.ts
Accordion list of past orders fetched from GET /orders. Expandable to show item thumbnails, prices, and quantities. Status badges: pending → confirmed → preparing → ready → delivered → cancelled.
pages/Orders.tsx
Socket.io client connects to apigateway.webtour.ph, joins user room, listens for order:updated/update/status events. Deduplication prevents double notifications.
lib/socket.ts
context/OrdersContext.tsx
Slide-in panel from right. Bell icon shows unread badge. Mark as read / mark all / clear all actions. Color-coded info/success/warning types.
components/layout/NotificationsPanel.tsx
Ephemeral toast stack auto-dismisses after 4.5s. Ready/delivered orders trigger a celebratory sound; other updates play a softer chime via Web Audio API.
lib/sound.ts
context/OrdersContext.tsx
BFC Assistant — local AI chat server (Express.js, port 3002). Answers menu, price, and delivery questions. Chat modal with typing indicator, accessible from the header.
components/ai/AIChatModal.tsx
server/index.js :3002
Photon/OSM autocomplete (PH-biased bbox), 500ms debounce. Two-step flow: search results → map preview → confirm. Recent addresses saved in context.
components/location/AddressPickerModal.tsx
Browser Geolocation API auto-fills address via Nominatim reverse geocoding. OpenStreetMap iframe embed previews the selected location with a marker. No API key needed.
AddressPickerModal → MapPreview + reverseGeocode
Profile page shows name, email, and avatar. Avatar upload via PATCH /users/:id/avatar (multipart/form-data). Full CDN URL built from relative path. Zustand store updated on success.
pages/Profile.tsx
api/upload.ts
GET /rewards returns total points + history. Points summary card (1 pt per ₱10 spent). Transaction history list with descriptions and timestamps.
pages/Rewards.tsx
api/rewards.ts
Fixed bottom nav: Home, Menu, Cart, Profile. Active route highlighting. Cart badge with live count. Max-width 1200px, centered on desktop.
components/layout/BottomNavigation.tsx
Access token, refresh token, and user object stored via a typed storage service wrapper. Axios interceptor attaches Bearer token to every API request automatically.
services/storage.ts
api/axios.ts
| POST | /auth/signin |
| POST | /auth/signup |
| GET | /orders |
| POST | /orders |
| GET | /cart |
| POST | /cart |
| PATCH | /cart/:id |
| DELETE | /cart · /cart/:id |
| GET | /rewards |
| PATCH | /users/:id/avatar |
| POST | /api/chat (port 3002) |
| / | Home (protected) |
| /menu | Menu browse + search (protected) |
| /cart | Cart & checkout (protected) |
| /orders | Order history (protected) |
| /rewards | Points & rewards (protected) |
| /profile | User profile (protected) |
| /login | Login (guest-only) |
| /register | Register (guest-only) |
| /forgot-password | Reset (guest-only) |
Community Posts shipped. FCM Push, Vouchers, Missions, Tier/Frequency Trackers, Personalized Recs & Geofencing pending.
API-backed posts feed with branch filter, star ratings, create-post modal, avatar display. Lives at /posts route.
FCM/Web Push for news, promos & order updates. Permission prompt on first open; notification preferences in Profile.
Voucher list under Rewards tab. Apply code at checkout — validates & deducts from cart total. Voucher pill in CartSummary.
Mission cards with progress bars (e.g. "Order 3 cold brews this week"). Claim reward on completion.
"X more visits to redeem reward" widget on Home/Rewards. Step-dot progress indicator against tier threshold.
Visual progress bar Bronze → Silver → Gold → Platinum. Shows points needed & perks unlocked per tier.
"You might like" horizontal scroll on Home & Menu based on order history. Server-side ranked product list.
Geofence push when user enters ~500m of a branch. Haversine watch + FCM per-branch topic. Pauses when tab hidden.
Standalone React PWA for store staff and administrators. Separate from the customer app.
JWT login, localStorage persistence, auto-logout
Order stats, revenue summary, recent orders feed
View all orders, update status, real-time socket alerts + sounds
Create, edit, delete products; image upload; category filter
List, create, edit users; assign branch; set user type
Create, edit, delete branches; toggle open/close — fully API-backed
Real-time new-order & status-update alerts, sound on new order
View account info, logout
Debug builds hosted directly on this docs server.