This will be my "first" personal project produced for Boot.dev. I'd prefer to keep this closed-source, so this repo will be moved to my private GitLab as soon as I'm able, but the course expects that I produce open source code. I assume I'll be graded on it at some point, and I can only hope it doesn't get crawled in the mean time. Regardless: the intent is to first produce a refactor of my old xLib project, adding 2FA and some other features, cleaning it up, and to produce from that a tool that tracks tasks like a to-do list in a detail-oriented tree. Being that I've been a user of Microsoft's To-Do for a long time, allowing it to run my life for me, nearly, I'll be basing the functionality on that.
Anything I've struckthrough here is being reserved for a future version.
The minimum viable product for this project will be that I'm able to produce a webpage that displays separately a collection of task lists, and a collection of tasks from the currently selected list. Each list internally should be handled as a task itself. Tasks must be able to be completed, have their priority shifted, added and removed. You should be able to change the text of a task.
The big difference from Microsoft's style is that I intend to use a many-to-many relationship system. Each task can be promoted to a list or a category, or demoted to a step of another task without losing any of the other associated data. Tasks can be 'children' of multiple lists. Subtasks are themselves full-fledged tasks, not just togglable strings. Categories and lists can be 'completed' just like tasks and will be separated from uncompleted collections accordingly.
Being that this is a web app, the deployment can be found at https://crowspin.dev. I didn't have a homepage built yet anyways. If you must deploy it for yourself, the server is running on Apache, PHP-FPM, and MariaDB. Use up-to-date versions. Some PHP-FPM or apache configuration may be required; I can't find my notes on the server setup at this time.
I'm kind of hurrying this along, this block here should have much more detail. It's just that I have every intention to pick this back up a while from now, make it look nice, work better, etc. It'll be deployed as a component of a PWA on a different web server I'll be building out with much better-kept configuration notes. Hell, at that time, the app will actually have error handling. For the most part, barring database connection issues, the app shouldn't error out in it's current state. I've gone way over the 40 hours I was supposed to spend on this, but I did learn a lot about SQL CTE expressions, temporary tables, and many-to-many relations. Before this all I really knew were the most basic one-line queries, now I feel like I can write whole functions in SQL, and that's dope.
- Refactor Login class and MySQL interface layer (backend)
- Create Login page for testing
-
Add 2FA functionality compatible with standard authenticator apps - Build basic webpage with static sidebar
- Sidebar lists tasks upgraded to "Lists"
- Lists can be categorized as well
- Main screen:
- Should show "category"-class tasks as potentially collapsible group
- Should display only categories that are children of selected list
- Categories should only display tasks that are children
- Categories should be re-arrangable, optional (if user needs to do List->A->1, then List->B->1, then List->A->2 in order, the applet should allow that arrangement)1
- Separate view should be made visible when a task (of any classification) is selected
-
Should have an automatic "My Day" list that allows alternate grouping1 and which suggests new tasks, collects tasks due same-day, and retains tasks due yesterday in-order, automatically. -
In PWA mode should support swipe-actions (swipe left to delete, swipe right to add to your day, etc)(configurable)
-
Consider possibility of making lists accessible to multiple people for group projects - Readme needs to explain how to clone and run
- Should have the option for categories in any list-like placement
- Add/Remove/Edit anything.
- Have 'completion' boolean
-
Have 'urgent' boolean - Permit string up to (256? 512?) characters as primary descriptor
- Have 'priority' or 'order' within list/category
- Be able to have multiple parents and multiple children (conflicts with previous, still doable)
-
Support long-form explanations in a textbox field which would store it's data on a separate table with linked indexes to minimize storage allocations -
Have an 'Add to My Day' button -
Have reminders (either through push (PWA?) or via. email) -
Have due-dates, times, possibility for multiple? -
Repeat options (don't litter the table with complete instances, just change due-date (etc) and mark incomplete whenever marked completed -
Support attatchments? Images. Maybe. -
Store created, modified, completed datetime -
Be automatically pruned after a fixed period of time after completion to reduce wasted memory in database -
Automatic child deletion should be configurable so that lists exported for protection can be imported for viewing without being automatically deleted. Should be able to be disabled per item (bitflag?)
-
Support automatic sort options without losing custom order -
Be able to be imported, exported, shared, duplicated (markdown or proprietary)
this will probably be the last time I make a feature list in this style, being that this project will replace the need for them