Welcome to Pseudo. We are building a mobile application that allows users to solve coding interview questions using pseudocode.
Refer to ./instructions/instructions.md for high level details on the project such as: - Project Overview - Core Functionalities (features and screens) - Database Schema - S3 Blob Storage Structure - Python Data Models (for FastAPI backend) - Project File Structure
- main for production
- dev for development
- Can be merged into main after review and testing.
- Intended to be used if there are multiple feature branches in progress and requires joint testing.
- feature/ for new features
- Can be merged into main after review and testing.
- .github: for copilot-instructions.md if we decide to use GitHub Copilot.
- backend: for Pseudo, a FastAPI backend and any future backend services.
- frontend: for Pseudo, a React Native frontend and any future frontend services.
- instructions: for file used to give LLMs context on specific parts of the project.
- notes: for unorganized or random notes and utils for the project.
- Move specific, non-instruction and non-README files to Notion (or other markdown-compatible markdown editors).
- We don't want to leak any sensitive design information or queries in the git history.
- Setup Supabase authentication and postgresql database. Include some dummy data for testing.
- Setup Supabase authenticaton
- Setup e-mail/password authentication
- Enable e-mail/password authentication in Supabase
- Setup Google authentication
- Google OAuth Client ID and Client Secret created
- Enable Google OAuth in Supabase
- Need to update Google API Console with authorized Javascript origins and authorized redirect URLs
- Setup Apple authentication
- Probably need an Apple Developer Program account for this
- Apple OAuth Client ID and Client Secret created
- Enable Apple OAuth in Supabase
- Need to update Apple Developer Account with authorized redirect URLs
- Consider adding a GitHub OAuth also
- Setup e-mail/password authentication
- Setup Supabase database
- Create a database function and trigger to automatically create a record in app_user table when a new user signs up via Supabase auth.
- [] Setup Supabase dummy data.
- Delete old dummy data
- Create a new database trigger that will create dummy data when a record is inserted into app_user table
- Update dummy-data.md to reflect the new script and process for enabling/disabling the trigger
- Maybe we can keep the dummy data and create a new database for production that has real data?
- Create SQL scripts and/or stored procedures to be used by the app.
- Setup S3/Blob-storage dummy data.
- Start by storing dummy data in the backend/dummy-data folder.
- Create 10 questions. Each question should have it's own file.
- Create a userquestion record for (10) of the questions. Half are solved, half are not.
- Once we feel comfortable testing with dummy data, we should start to move them to a real blob storage service (or use local storage on the python server).
- Start by storing dummy data in the backend/dummy-data folder.
- Setup Supabase authenticaton
- Note: we are developing the frontend "first" because we want to POC the app using dummy data. Typically the backend is developed first.
- Setup Home screen.
- Setup Question Groups screen.
- Setup Questions screen.
- Setup Solve screen (using dummy data for hints ai chat bot and pseudocode validation engine)
- At this point we should have a hard-decision on how we want to use the hints and ai chat bot. At this point I think it should be a one-way chat bot that only gives hints.
- Setup Login/Signup screen. This is near the end because we need to POC that the other screens can work as intended. Login/Signup implementation is straight forward.
- Setup Profile screen. This is near the end because we need to POC that the other screens can work as intended. Profile implementation is straight forward.
- Develop the FastAPI backend.
- Create endpoint contracts
- Create endpoints
- Setup server for running python backend and storing blob storage data.
- Consider Digital Ocean for hosting and see if it can store blob data.
- Consider S3 alternatives for blob storage if we cannot store it in Digital Ocean.
- Consider splitting the supabase project into separate development and production projects.
- Install/implement capabilities for using Expo EAS build. This is only needed for production builds.
- Setup CI/CD pipelines. This should only happen after sampling the app to real users to see if its even worth brining to market with consistent updates.
- Bonus task for implementing a CI/CD pipeline via GitHub repository.
- Bonus task for implementing a CI/CD pipeline for database migrations using Supabase (probably should be part of backend/pseudo python project)
- Note that the initial DB table creations were created via SQL editor in Supabase. We should have this in code somewhere for historical purposes.
- For Supabase database migrations, it's recommended to use the Supabase CLI. We can build this as part of GitHub Actions.
- Create a landing page for the app.
- Once we get a decent MVP in production, we should start sampling the app with real users.
- Reach out to Codesmith users.
- Reach out to Coffee & Code users.
- Reach out to coding subreddits/online communities.
- Consider setting up a feedback loop screen in the app.
- Brainstorm the best way to get feature review and feedback from users. Do we want a screen for all requests? Do we want a review feature for each question?
- Consider charging a fair price once we see users are happy with the product. Consider different pricing models.
- Consider a freemium-premium model where flashcards and games are free and the pseudocode evaluator is premium.
- Consider adding a "Flashcard" feature to the app.
- Create a markdown file discussing major flows in the app. Emphasis on how data is inserted, updated, fetched, indexed, cached, stored, and served to the user.
- Consider adding a "pattern matching" flow to the pseudocode evaluator. Intent is to avoid going to an LLM if we don't need to.
| Status |
|---|
| π’ Implemented |
| π‘ Under Consideration OR Not Yet Implemented |
| π΄ Not Implementing |
| # | Priority | Title | Description | Notes | Status | Decision |
|---|---|---|---|---|---|---|
| 1 | Low | Difficulty Field Type in Question Table | Use ENUM data type in the API and app. INT in the database. | Could improve lookup speed. Is this change beneficial at this point? | π΄ | Not implementing. At this point in the project, the benefits do not outweigh the work required to make this change. |
| 2 | Low | Pseudocode Evaluator as Premium Feature | Making pseudocode evaluator a paid feature | Could offer flashcards and study games as free features. May help manage user expectations and feedback because the pseudocode evaluator will be finicky. | π‘ | Under consideration. This should be considered with other pricing options once the MVP is complete. |
| 3 | Medium | Question Loading Strategy | Current method of fetching all questions on login may cause performance issues as question count grows; need alternative strategy | Consider creating a RecentlyVisited table for questions and collections a user visited recently and load those plus default collections and "default"/hand-picked questions. | π‘ | Not yet implemented. We need a design document showing the necessary changes. This project is better suited for when we are at (or close to) MVP. |
| 4 | High | User ID Integer Field | Adding user_id_int field to public.app_user table | Could significantly improve SQL query performance by using integer comparisons instead of string comparisons | π‘ | Not yet implemented. Will target this after some initial testing of the app. |
| 5 | Low | Dark Mode Preference Data Type | Changing dark_mode_preference from VARCHAR to INT | Using an enumerable data type could represent different modes more efficiently (0 for system default, 1 for light, 2 for dark) | π΄ | Not implementing. At this point in the project, the benefits do not outweigh the work required to make this change. |
| 6 | High | User Question Record Creation | Creating user_question records on first attempt | Implement to create records when a user first attempts a specific question, rather than pre-creating for all questions | π‘ | Not yet implemented. This will likely be implemented once we start coding the app and api. |
| 7 | Medium | Weekly Streak Record Management | Handling weekly_streak records | Implemented solution to insert or update weekly_streak records when a user successfully solves a problem. | π’ | Implemented as much as we can in terms of where we are at currently with the app development. |
| 8 | High | Collection Table Simplification | Simplifying the collection system | Implement a single Collection table with a "default" boolean column to distinguish between default and custom collection. | π΄ | Not implementing. It is a technical decision to keep two separate tables (Collection and DefaultCollection). |
| 9 | Medium | Hints and AI Chat Bot | Make a decision on how the AI chat bot will work for MVP. | Implement a one-way chat bot that only gives hints OR implement a two-way chat bot where users can ask for hints. | π‘ | Under consideration. This will likely be decided on and implemented with the Solve screen. |
| 10 | Low | Admin page | We need admin endpoints for creating, updating, and deleting questions and default collections. | Should this live with the app's landing page or its own webapp? | π‘ | Under consideration. This is close to MVP or post MVP. Leading towards adding this to the landing page. Will need a hidden route and auth for the page. |
pseudo
ββ backend
β ββ storage
β ββ blob
β β ββ formatting.md
β β ββ submission-eval-flow.md
β ββ dummy-data
β β ββ blob-dummy-data.md
β β ββ questions
β β β ββ L-1.json
β β β ββ L-102.json
β β β ββ L-121.json
β β β ββ L-127.json
β β β ββ L-15.json
β β β ββ L-20.json
β β β ββ L-200.json
β β β ββ L-23.json
β β β ββ L-295.json
β β β ββ L-3.json
β β ββ sql-dummy-data.md
β β ββ userquestions
β β ββ 294a924b-4591-45ea-b3dd-c6c9c6112b2e.json
β β ββ 510f9dcc-464e-48ff-a920-43518eabbd54.json
β β ββ 803d9755-94ed-4749-9ed9-83e7b3f5abba.json
β β ββ 83481541-f24b-4906-b867-751125527037.json
β β ββ 8f580c6e-3c8e-4502-91de-21aafa7521f7.json
β β ββ 9756b403-0988-428f-9368-d16e8a520687.json
β β ββ cc61c2ec-30cf-405c-ba27-77708eac1ab2.json
β β ββ dba22364-c980-4a6e-bc54-566b609914c8.json
β β ββ df576c81-0d19-4471-83ae-511e1bbc4271.json
β β ββ e69cbd17-09f6-4864-968a-de42da46df10.json
β ββ supabase
β ββ database-scripts
β ββ README.md
β ββ sprocs
β β ββ DeleteCollectionByUserId.sql
β β ββ InsertCollectionByUserId.sql
β β ββ InsertUserQuestion.sql
β β ββ SelectCollectionByUserId.sql
β β ββ SelectCollectionsByUserId.sql
β β ββ SelectDefaultCollectionByUserId.sql
β β ββ SelectProfileByUserId.sql
β β ββ SelectQuestionsByUserId.sql
β β ββ SelectUserQuestion.sql
β β ββ SelectWeeklyStreakByUserId.sql
β β ββ UpdateCollectionNameByUserId.sql
β β ββ UpdateProfileByUserId.sql
β β ββ UpdateUserQuestion.sql
β β ββ UpdateWeeklyStreakByUserId.sql
β ββ upscripts
ββ frontend
β ββ documentation
β β ββ Assets.md
β β ββ build.md
β β ββ eas-init.png
β β ββ header-v1.png
β β ββ HomeScreen
β β β ββ collections-v1.png
β β β ββ collectionsbottomdrawer-v1.png
β β β ββ homescreen-v1.png
β β β ββ HomeScreen.md
β β β ββ questions-v1.png
β β β ββ savequestiontocollectionbottomdrawer-v1.png
β β β ββ weeklystreak-v1.png
β β ββ ProfileScreen
β β β ββ ProfileScreen.md
β β ββ styling.md
β ββ pseudo
β ββ .env
β ββ app
β β ββ (tabs)
β β β ββ algorithms.tsx
β β β ββ flashcards.tsx
β β β ββ home.tsx
β β β ββ _layout.tsx
β β ββ collection.tsx
β β ββ components
β β β ββ home
β β β β ββ Collections.tsx
β β β β ββ CollectionsBottomDrawer.tsx
β β β β ββ Questions.tsx
β β β β ββ QuestionsByCategory.tsx
β β β β ββ SaveQuestionToCollectionBottomDrawer.tsx
β β β β ββ SortQuestionsBottomDrawer.tsx
β β β β ββ WeeklyStreak
β β β β ββ DayColumn.tsx
β β β β ββ index.tsx
β β β ββ shared
β β β β ββ BottomSpacer.tsx
β β β β ββ Header.tsx
β β β ββ ui
β β β ββ avatar.tsx
β β β ββ badge.tsx
β β β ββ button.tsx
β β β ββ card.tsx
β β β ββ dropdown-menu.tsx
β β β ββ input.tsx
β β β ββ radio-group.tsx
β β β ββ select.tsx
β β β ββ separator.tsx
β β β ββ text.tsx
β β ββ contexts
β β β ββ AvatarContext.tsx
β β ββ hooks
β β β ββ useDrawer.ts
β β β ββ useHomeData.ts
β β ββ index.tsx
β β ββ lib
β β β ββ icons
β β β β ββ ArrowLeft.tsx
β β β β ββ Bell.tsx
β β β β ββ BellRing.tsx
β β β β ββ Bookmark.tsx
β β β β ββ Bug.tsx
β β β β ββ Check.tsx
β β β β ββ ChevronDown.tsx
β β β β ββ ChevronRight.tsx
β β β β ββ ChevronsDown.tsx
β β β β ββ ChevronsDownUp.tsx
β β β β ββ ChevronsRight.tsx
β β β β ββ ChevronsUpDown.tsx
β β β β ββ ChevronUp.tsx
β β β β ββ Circle.tsx
β β β β ββ CircleCheck.tsx
β β β β ββ Ellipsis.tsx
β β β β ββ House.tsx
β β β β ββ iconWithClassName.ts
β β β β ββ IdCard.tsx
β β β β ββ Layers.tsx
β β β β ββ Palette.tsx
β β β β ββ Pencil.tsx
β β β β ββ Sparkles.tsx
β β β β ββ SquareTerminal.tsx
β β β β ββ UserRoundPen.tsx
β β β ββ useColorScheme.tsx
β β β ββ utils.ts
β β ββ profile.tsx
β β ββ questions.tsx
β β ββ solve.tsx
β β ββ testing.tsx
β β ββ _layout.tsx
β ββ app.config.js
β ββ assets
β β ββ avatars
β β β ββ 1.png
β β β ββ 2.png
β β β ββ 3.png
β β β ββ 4.png
β β β ββ 5.png
β β β ββ 6.png
β β β ββ 7.png
β β β ββ 8.png
β β β ββ bosty-1.png
β β ββ fonts
β β β ββ Montserrat
β β β β ββ Montserrat-Italic-VariableFont_wght.ttf
β β β β ββ Montserrat-VariableFont_wght.ttf
β β β β ββ OFL.txt
β β β β ββ README.txt
β β β β ββ static
β β β β ββ Montserrat-Black.ttf
β β β β ββ Montserrat-BlackItalic.ttf
β β β β ββ Montserrat-Bold.ttf
β β β β ββ Montserrat-BoldItalic.ttf
β β β β ββ Montserrat-ExtraBold.ttf
β β β β ββ Montserrat-ExtraBoldItalic.ttf
β β β β ββ Montserrat-ExtraLight.ttf
β β β β ββ Montserrat-ExtraLightItalic.ttf
β β β β ββ Montserrat-Italic.ttf
β β β β ββ Montserrat-Light.ttf
β β β β ββ Montserrat-LightItalic.ttf
β β β β ββ Montserrat-Medium.ttf
β β β β ββ Montserrat-MediumItalic.ttf
β β β β ββ Montserrat-Regular.ttf
β β β β ββ Montserrat-SemiBold.ttf
β β β β ββ Montserrat-SemiBoldItalic.ttf
β β β β ββ Montserrat-Thin.ttf
β β β β ββ Montserrat-ThinItalic.ttf
β β β ββ SpaceMono-Regular.ttf
β β ββ images
β β ββ adaptive-icon.png
β β ββ favicon.png
β β ββ icon.png
β β ββ partial-react-logo.png
β β ββ react-logo.png
β β ββ react-logo@2x.png
β β ββ react-logo@3x.png
β β ββ splash-icon.png
β ββ babel.config.js
β ββ eas.json
β ββ example.env
β ββ expo-env.d.ts
β ββ global.css
β ββ metro.config.js
β ββ nativewind-env.d.ts
β ββ package-lock.json
β ββ package.json
β ββ README.md
β ββ supabase.ts
β ββ tailwind.config.js
β ββ tsconfig.json
ββ instructions
β ββ instructions.md
ββ notes
β ββ lessons-learned.md
β ββ pretty-json-template.json
β ββ README.md
ββ README.md