Repository navigation
A5 - Tech Demo, pt. 1
Demo Release 1: Foundational Architecture & Firebase Integration
Direct Links
• CUJ & JTBD Overview
• ADR 013 – Firebase Integration
• ADR 014 – Kaggle Dataset via Google Cloud
• ADR 015 – Scrollable Restaurant Interface
Roadmap Update
Since the last milestone, our team has made major progress toward implementing the core infrastructure and frontend skeleton for our hyper-personalized restaurant recommendation app.
We focused on establishing a working authentication and data backbone using Firebase Authentication and Firestore, and began building the scrollable, searchable restaurant list interface using Flutter. We also began working on a Kaggle-to-Google Cloud pipeline to supplement external API data with reliable Toronto-based restaurant entries.
These updates align with our short-term roadmap milestone (“Core Infrastructure Setup & MVP Skeleton”) and primarily address the following CUJs:
• M1: Create an Account and Build a Personalized Profile
• M2: Get a Personalized Restaurant List with Images and Rationale
• M3: Adjust Distance and Filter Categories to Refine Results
We successfully completed the frontend scaffolding in Flutter, integrated Firebase for authentication and database management, and began seeding the Firestore database with mock restaurant data for testing. The next milestone will involve connecting the frontend filters to live data queries and refining our ranking logic.
Issue Summary
We have made substantial progress on our short-term goals, including work on our main CUJs and infrastructure.
- ST-3: M1: Implement the auth page, with login/signup (email, Google OAuth) -> In Review
- ST-3: M1: Onboarding questionnaire; create a taste profile object saved with Firestore -> In Progress
- ST-3: M2: Basic recommendation list rendering -> Ready to Begin
- ST-1: Initialize frontend with Flutter (Dart) for cross-platform iOS/Android mobile app development, with low-fidelity sketches in Figma guiding UI. -> In Review
- ST-4: Clearly define the filtering and recommendation UX with Flutterflow and Figma -> Done
- ST-1: Add Kaggle Dataset integration (Toronto Restaurant Data) via Google Cloud -> Created; In Progress
Roadmap Change Details
Architecture
We finalized the decision to standardize on Firebase for both authentication and database management to align with our choice of Flutter as the front-end framework. Flutter’s strong cross-platform support allows us to deploy seamlessly on both iOS and Android, while Firebase offers native SDKs that integrate easily with Flutter’s reactive state management.
Furthermore, Firebase's NoSQL Firestore is ideal for creating flexible, schema-less, storage, which is highly useful for dynamically representing restaurant data. Firebase also integrates seamlessly with Flutter. Overall, these decisions (ADR 013 and ADR 015) help ensure minimal backend maintenance, real-time sync, and offline persistence, which is highly important for early testing and field demos.
We also initiated the Google Cloud ingestion pipeline (ADR 014) to host and query Kaggle’s Toronto Restaurant Dataset via BigQuery, allowing us to populate Firestore with consistent, structured venue metadata for development.
UI/UX
We completed a scrollable list interface where each restaurant card displays:
• an image placeholder,
• cuisine, location, price, and rating icons,
• and a short rationale explaining “why this fits you.”
The next iteration will aim to add interactive filters (distance, price, cuisine) that dynamically re-rank results. Mock data currently drives the feed to allow UI/UX validation before backend integration.
Research & User Testing
Our initial user research involved informal discussions with classmates and within our team to validate our UI and the information included in our recommendation cards.
Here are our main findings:
• Users appreciated short, personality-based questions in a highly brief 1–2-minute quiz (CUJ M1).
• Most preferred rationale text over raw scores, validating our decision to include “why this fits you” blurbs.
These observations directly informed our UI priorities and early database schema design.
Decisions Log
• ADR 013 – Firebase Integration: Adopt Firebase Authentication and Firestore for backend simplicity, role-based security, and real-time sync.
• ADR 014 – Kaggle Dataset via Google Cloud: Upload Kaggle Toronto dataset to Google Cloud Storage + BigQuery, serving as a reliable seed source when APIs are limited.
• ADR 015 – Scrollable Restaurant Interface: Build mobile-style feed with Flutter’s ListView and ScrollContainer and inline rationale generation.
Milestones
Our current milestone covers all three of our main CUJs, with functional progress on the first two and groundwork laid for the third.
M1. Create an Account and Build a Hyper-Personalized Profile
→ Implemented using Firebase Authentication and Firestore to enable secure user sign-up and login. Basic user data is stored and retrieved successfully across sessions.
M2. Get a Personalized Restaurant List with Images and Rationale
→ Implemented through a Flutter-based scrollable feed displaying restaurant cards with images, cuisine type, and descriptive text using mock Firestore data.
M3. Adjust Distance and Filter Categories to Refine Results
→ Filter UI components have been drafted and will connect to Firestore queries in the next sprint to enable real-time re-ranking of restaurant results.
JTBD Coverage
- Find a cheap sit-down restaurant near campus with dietary options.
→ Implemented via Firestore-seeded mock data with budget and diet fields. - Find a quiet café for professional meetings.
→ Will be handled once “vibe” and “distance” filters are wired to the UI. - Coordinate group dining preferences.
→ Will work on this as part of our Secondary CUJs (requires group taste aggregation logic and will take time with only two people).
Summary
This release marks our first functional integration milestone: the system can now authenticate users and display mock personalized restaurant data through a scrollable interface.
We are now positioned to connect our frontend to real Toronto data and begin implementing ranking logic, filter refinement, and user preference tuning.