Bebbit4ever
cd frontend
npm run dev
cd backend
npx tsx --watch .
- Basic Structure
- Working Authentication
- Frontend Pages
- Supporting Backend
- Use passport
- Username + password login
- Move DB to its own file
- Move Schemas to their own file and use them in frontend
- Add Frontend Flash Message
- Add Timeouts
- Page timeout (message expires after x redirection)
- Infinite timeout (message expires only after user removes it)
- Time timeout (message expires after some time)
- Import whole ad-hoc chunk of MongoDB's js-bson to get access to a good ObjectID on the frontend, rip
- Have an actual isomorphic folder between backend and frontend
- Basic Todolist
- Per User and private
- Single one
- Add Collection
- Add Index for Collection
- Add routes
- View/Create Todolist
- Edit/Create Todolist
- Add Page
- View Todolist
- Add Item
- Edit Item
- Remove Item
- Debounce Item Updates
- Add to Menu
- Basic Real-Time Chat
- Single Chat for all ppl
- Each message has author, content and date
- Add Collection
- Add Index
- Add Routes
- Add Page
- View Chat from last 24 hours
- Poll every second
- Post Message
- Only poll from latest update
- Speculatively add messages
- Show Nicknames
- Add to Menu
- Basic Threads
- Create Schemas, Collections, Indexes and Views
- Add Routes
- List Threads
- Create Thread
- View Thread
- Comment
- Add Pages
- Threads
- Thread
- Add to Menu
- Basic Document Tree
- Per User and private
- Create Collections, Indexes, Schemas and Views
- Add Routes
- CRU Folder
- All top-level Folders
- CRU Document
- Add Page
- Roots
- Folder
- Show Content
- Create Folder Children
- Create File Children
- Document
- View and Edit
- Add to Menu
- Minor Cleanups
- Login
- Move login and logout to user.ts
- Change data-structure
- Share redirect login logic instead of ad-hoc on all pages
- Better hydration logic
- data | undefined, instead of separate boolean
- Check page [id] change logic
- use page id to avoid stale id
- Wrap Pages into Component
- Check that poll interval are cancelled in chat on dismount
- Remove console.log
- backend/index
- +page.svelte
- Move from slug to get params because of adapter-static
Make all updates optimistic- Cancelled: doing cleanly costs a lot for not much
- Don't close page while loading
- Move to +page.ts
- Cancelled: breaks static website
- Uncancelled: need to use
if(browser)
- Preload
- freebie from svelte, as long as +page.ts
- Move to +page.ts
- Login
- Spaces
- Constraints
- Owner can be team, or user
- user has single space
- One universal space?
- to-do list linked to a space
- chat messages linked to a space
- threads (but not thread comments)
- folders and files linked to space
- space page that links to all the others
- Update Schemas, Collections, Indexes and Views
- Pages
- Remove Top-Level Menu
- Space Index Page
- Update all pages with space
- All Threads, Create Threads, View Thread
- Folder Roots, View folder, Edit Folder
- Create Folder, Create File, View File
- Edit File
- Chat
- To-do list
- Space Id Ez with user and team names
- Routes
- Get Space from user name
- Update all routes with Space
- Check for permission whenever Space
- Constraints
- Fix req.user and User
- Remove password from Express.user
- Create space on register
- Use SafeUser in frontend/user.ts
- Protect Register route
- Guarded Routes to ensure client-side auth
- Basic Teams
- 1 admin per team
- 1 user can be in multiple team
- each team has its space
- DB stuff
- Add list of teams in User
- Add Collection, Indexes, etc.
- Add Team Requests
- Routes
- Update User Routes
- Create Team
- Invite User to Team
- Accept Invite to Team
- Dashboard
- Team Dashboard
- Pages
- Update User Dashboard
- Space Index
- Joined Teams + links to space
- Accept Team Join
- Team Requests
- Create Team
- Team Dashboard
- Space Index
- All Users
- Team Requests
- Admin: Invite user to team
- Update User Dashboard
- Basic Search
- Chunk Text Documents by line
- Chunk Threads and Comments by line
- Compute index documents
- Automate Chunk Creation
- Special Schemas for SearchIndex and SearchChunk
- Add index fields to collections
- Chat Messages
- File Name
- Folder Name
- Index the fields, update existing indexes
- Connect to REPLICAs
- Locally, connect only to primary
- Routes
- Update Routes to support indexes
- Search word in all team content
- Page
- Search Bar at top
- Search Results Page
- Requests / Inbox
- Go over text in all +page.svelte and see if it's correct/coherent
- Remove debug text in +page.svelte
- Remove console.log
- Deal with MongoDB index error
- Register page
- Check history behaviour with goto('/')
- Doesn't add to history, and should
- Add one line of comment to all foreign keys in schemas
- Dirty Railway Deploy
- Remove Bun Garbagino
- Staging vs Prod Environments
- Kill servers when not used
- On server, connect to all replicas
- Re-do Routes
- Move everything to post
- Remove application level
ok
in responses (redundant with 200 and response.ok) - Remove fetch boilerplate
- Remove spaceId boilerplate
- Homogenise route names (create/view, singular/plural)
- Zod Validators for inputs instead of ad-hoc
- Typed Routes
- Auth Routes
- Error on wrong login
- Refactor Forms
- Ensure all things disabled while form is running
- Refactor db.ts
- Split across files
- Move all db access functions there
- Display Frontend Flash Messages
- Compactify all identical messages (just a counter)
- Styling
- Borders
- Colors
- Navbar
- Dates
- Contenteditable clear that they are text fields
- Font Family
- Pending Status Explicit (icon and/or text)
- Shortcuts
- Per user and per team
- Just a page with shortcuts to threads, files, chats, etc.
- Obsolete by Space Page?
- Security
- Check all routes for authorisation
- Refactor authorisation
- Optim
- Check everything for pre-loading on hover
- Including layout.svelte for user
- Check everything for pre-loading on hover
- Tests
- Unit Tests
- n-grams matching
- API Tests
- E2E Tests
- Unit Tests
- User
- Public User Profiles
- Todolist
- Separate Collection for Tasks
- Multiple Todolist per user and space
- Priorities for items
- Deadline for items
- Sync Indicator
- Poll for updates
- Threads
- Forums (Channels for threads)
- Pagination for Thread List
- Show Author
- Show Date and Time
- Edit Comment
- Edit OP
- Show Edit History
- Show Date
- Real-Time Chat
- Channels
- Web Socket
- File Tree
- Basic Real-Time Doc Editing
- Maintain Real-Time Doc in server memory
- Debounce updates to DB
- Max debounce time 1 min
- Trash and delete
- History
- Add date to folders and files
- Order Folders and Files alphabetically
- Markdown Rendering
- Get parent of file
- Basic Real-Time Doc Editing
- Teams
- Leave Teams
- Remove User from Team
- Cancel Request from Team Side
- Requests
- Priority from emitter
- Good Environments
- Staging vs Prod
- Prod Super Duper Hidden
- Decide on Railway or VPS
- Mongo Atlas
- Think about permissions
- MongoDB replication
- Non-indexed Files
- Massive Optim
- Incremental queries?
- How do you log all events since date T, including deletions?
- Append only data-structure?
- Never delete, only archive, and filter for last edit?
- Client Side Database
- Chunk large docs
- Hashed indexes instead of sorted ones
- Incremental queries?
- User
- Add recovery email, in case of lost password
- Magic Link
- Username generator for people with no inspiration
- ... or for everyone??
- Username / mail change
- Flush session cache in case
- Integrations
- Mobile Push Notifications
- Mail to send requests, tasks and messages to
- Recap Email every day
- Benchmarks
- Dummy DB with millions of records, time each query
- Limit Everything
- Username and Teamname format (URL friendly)
- Nb of request per second per IP
- Size of all text fields in schemas
- chat messages
- threads and comments
- 20 teams per account
- 200 pending team request per team
- limit / pagination on all queries with unbounded nb
- threads
- folders
- roots
- team members
- chunk files
- size limit per space
- API
- Well Document API
- API Tokens
- Export
- Export everything as a JSON
- Sharding
- Sharding across spaces
- Errors
- Fail on all errors and warnings in dev
- Recover as much as possible in prod