TODOs:
-
CRUD, API endpoints and React Components
- birdCalls
- get all
- search by id
- get specific (level, class)
- Get mnemonics, work on formatting and how best to display
- Open database of bird images (possible hint)
- mnemonic, scientific name, other metadata and info fields
- birdCall page (locked/unlocked level etc, link to lesson, similar, search by metadata)
- popout modal for each birdcall
- synonyms, different localities and variants
- don't double up level ups/downs in same session
- users
- get all
- search by id
- get specific (username, email)
- update (e.g. level)
- delete
- level up
- levelData field to append level started dates
- userLevel
- get all
- search by id
- get specific (level number)
- item
- get all
- search by id
- get specific (userId, birdCallId, level)
- create (all items for new level for user)
- level up
- update (level, reviewdate etc)
- do if lesson/review complete
- delete
- remake lesson if deleted/reset
- count how many due for review now, in next hour, next 24 hours.
- itemLevel
- get all
- get by id
- get specific (num, name)
- lesson
- in UI, [display audio, spectrogram, metadata]
- make for all current level items when levelup
- move item from level 0 to 1 when done and delete lesson
- create, get all, get by id, delete
- make lesson page
- lesson unlock
- recreate if item reset
- don't create if pair already exists
- reviewSession (combines all reviews ready for review)
- UI [display audio, spectrogram, metadata]
- text box for answer
- disable next review button until answered
- prev review, disable if first etc
- multiple choice (hint)
- create new review whether correct or incorrect with associated times etc.
- only do at end of session (pick small block size e.g. 10)
- spectrogram, audio, scientific name could be could be different testing grounds, like reading + meaning in WK
- stats for session (temporary or store)
- ungradedSession (select some items to review, no change to item level/activity)
- pass items to reviewSession page
- classroom (connects teacher and students)
- Lesson/course creator (teacher, admin) probably just permissions based
- Assign students to teacher
- Add classroom ID to user in create and addLearnerToClass
- Teacher view (correct/incorrect items)
- group stats
- class tests (create, push/assign, store results)
- general components
- Navigation tabs/buttons
- Connect to AWS to load sounds
- make sure user can't go over max level, same with item. need to have way to make date blank
- Modularize common scripts
- Modern styling
- carry User ID through session
- login/logout functionality
- (loading) notifications
- logo
- error handling
- users with no lessons, items with empty activity, etc
- don't levelup if lesson exists for that item
- Activity/history field of Item
- name: [started/lesson-complete, level-up/correct level-down/incorrect, complete, reset], date.
- calculate stats
- plot levelups/downs, lessons completed
- Helper document with example API calls
- faker for creating users, lessons, progress etc
- need to make a random array of activity with levelups, downs, resets and iteravely call API, check actual item level against expected level
- tokenized (maybe JWT) api calls for security
- table styling e.g. colour item by level
- birdCalls
-
Stats:
- upcoming reviews by hour next 24 hours
- show activity (last 24 hours, average per hour in lifetime)
- review count past 24 hours
- overall num attempts, num correct/incorrect, % correct
- when different review types, accuracy by type
- critical items (pick those with accuracy below a certain threshold)
- Level progression timing
- projections for finishing level
- error handling e.g. with empty activity
- start date, time spent on app
- streak/consistency (current, longest)
- retention metric(s)
- last year activity (like GitHub contribution map)
- num items at max level
- coverage of irish birds, bto pipeline, xenocanto etc (charts by level, items ordering)
- current level, level progress (plot and proportion)
- how many items on current level are >= item level 3
-
Testing
- https://enzymejs.github.io/enzyme/
- Backend (Node.js/Express API)
- Unit Tests:
- Use Jest for testing individual functions and logic.
- Create mocks and stubs for external services and databases to isolate unit tests.
- Route/Integration Tests:
- Use Supertest with Jest to test your Express routes.
- Write tests to make HTTP requests to your API endpoints and assert the responses.
- Database Seed Scripts:
- Create scripts to seed your database with dummy data before tests.
- Write cleanup scripts to remove test data after testing.
- Mocking and Stubs:
- Utilize Jest to mock external modules and services.
- Create stubs for database interactions to avoid hitting the actual database in tests.
- Code Coverage:
- Use Istanbul (nyc) with Jest to generate code coverage reports.
- Aim for high code coverage while ensuring tests are meaningful.
- Unit Tests:
- Frontend Testing (React Components)
- Unit and Component Tests:
- Use Jest and React Testing Library to test individual components.
- Test component rendering and user interactions.
- Mocking Hooks and Contexts:
- Mock custom hooks and context providers if necessary to isolate components for testing.
- Snapshot Testing:
- Optionally use Jest's snapshot testing to ensure UI does not change unexpectedly.
- Unit and Component Tests:
- End-to-End Testing
- Cypress or Puppeteer:
- Set up Cypress or Puppeteer for end-to-end testing.
- Write tests that simulate real user interactions from the frontend through to the backend.
- Cypress or Puppeteer:
- Continuous Integration and Continuous Deployment (CI/CD)
- Setup CI/CD Pipeline:
- Use tools like GitHub Actions, GitLab CI/CD, or CircleCI.
- Configure the pipeline to run tests on every push or pull request.
- Automate deployment on successful builds/tests to staging or production environments.
- Setup CI/CD Pipeline:
-
AI Components:
- RAG (Retrieval Augmented Generation) application - building LLM skills
- noise addition/reduction
- class prediction as hint/second opinion
- mnemonic image generation
- clustering to identify audibly/visually similar
- bird syllable recognition