Skip to content

Latest commit

 

History

History
338 lines (333 loc) · 9.56 KB

dev-notes.md

File metadata and controls

338 lines (333 loc) · 9.56 KB

Description

Bebbit4ever

dev

cd frontend
npm run dev
cd backend
npx tsx --watch .

V0

  • 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
  • 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
  • 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
  • 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

V1

  • 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
  • Tests
    • Unit Tests
      • n-grams matching
    • API Tests
    • E2E 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
  • 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

V2

  • 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
  • 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

V3

  • 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