Future
As great of a jump V3 was from V2 there are always things that can be improved or experimented with for V4.
CMS
- Alot of the current features and ideas below could be done using a Content Management System. This would come from Strapi which is an open source headless CMS.
- Some of the features are
- Image resize on upload
- public or authenticated required routes/rules
- possible integration with Auth0 here.
- Admin dashboard
- Provides login system
- Some of the features are
Monorepo
- One source of potential issues is the duplicated Type interfaces across the CLI, frontend, and backend. Using something like Nx from NRWL and having a Monorepo could help prevent potential issues and allow for future scalability.
CLI
- CLI subcommand called
doctor
(name sounds cool to me) that would help find errors in the DB (Such as an archive refers to a catalog that doesnt exist or an image refers to an archive that doesnt exist, image counts being wrong, or tags missing data). - Unit Testing for CLI.
- Multithreading?
Frontend
- Unit Testing for frontend on some of the parts that are deterministic.
- Pixel annotation with React Image Annotate.
- Add sliders as a possible question type.
- Add number field as a possible question type.
- Improve the way question sets are stored. Add ability to check/create new question sets in admin page.
- Admin page to show latest tags, update users, and other adminy stuff 🤷
¯\_(ツ)_/¯
. - Can be partially implemented using a CMS
Server
- Simplify some of the middlewares. Some are a little bit messy in terms of logic.
- Auto inser user db data via express
- Enforce user tag role checks on server rather then on the nextjs server from
getServerSideProps
. - Can be partially implemented using a CMS
Improve data/resource sharing between CLI and dashboard
- One issue noted was there was duplicate code in the CLI and dashboard.
- There should be a way to make it so they share the code (other then using symlinks, which is not sustainable as what happens if someone forgets to add the symlink)
- Can be solved with using a Monorepo setup.
GitHub Actions
- Create file for unit testing configs, such as user data and archives that will be used through out the test to unsure none of the tests step on each other.
- Auto deploy site whenever master get pushed to.
- Auto deploy dev site whenever beta gets pushed to.
VM
- Stream log files to other locations.
- Notify if the site goes down or if an error happens.
TypeScript
- Improve the way types are shared across the dashboard and CLI.
- Can be used by setting up a Monorepo
Experimental
- Make the DB be local instance instead of MongoDB Atlas.
- Would probably mean that users would have to make a local account and CAN NOT signin with Google/Facebook/Github/etc.
- Use a SQL database and maybe use Redis for caching/session management/message passing.
- CMS might be able to help with this
- Dockerize.
- Kubernetes.
- Dark theme 🌑 and Light theme ☀️ or maybe other themes/user themes.
- Redux for state management. (Maybe)
- Progressive image loading. (More or less done now)
- Archives within archives with in archives....etc.
- Images can have groups assigned to them (like tags on discord). So a image could have the
Florence
group andFlorenceArchive
group. - A user would need to have (atleast one or all, which ever idea works out best) inorder to tag an image. The group can have a rank (1,2,3,4...) and so images would be grouped by the rank 1 groups first then rank 2 and so on.
- Only one group per rank for an image (cant have say 2 rank 3 group labels).
- Images can have groups assigned to them (like tags on discord). So a image could have the