I was talking to my partner about project ideas, and out of all them I thought of, she wanted my version of a todo list. So I made a repository and started brainstorming. I thought of what was important and what would be ideal in a task app for me. Eventually, I ended up with this huge text specifying to capabilities of the app I wanted to make (which I'll paste at the end of this blog post). I ended up formatting it like a llm prompt so i gave it to Google Gemini and it spat out a little more useful info for me.
Anywho, before doing that I didn't even know what a Progressive Web Application was... or maybe I did but I never put any effort into memorizing the name. If you read the prompt I made carefully, you'll find that I don't really have any clue what I'm doing 😅. Though you'll also find that I tend to think of features of an app from a database-like point of view so thats what I did in my prompt.
Task app
The purpose of this task management software:
Makes a centralised board of tasks.
Prioritises ease of access, usablity, inspiration. (Eg. Nice widgets, interaction through notification hub on mobile, cross-platform)
Has additional features that are not thrust unto the user but are still there for power users
I need to decide what forms it may take:
Mobile app
Website
Main functional features:
The app consists of organizing and displaying different tasks. There are some main data objects and interactions in this app are clarified below:
Tasks:
Tasks are to be created by the user
Tasks must have a title
Tasks must have at least 2 or more states (unfinished and finished).
Tasks can have O or 1 deadlines/time
Tasks can have O or 1 description
Tasks can have O or many groups (sort of like tags, a group catagorises the nature of a task)
Tasks can have O or 1 projects
Tasks can be re-occurring*
Tasks must have typical metadata (id, created_at, last_edit)
Tasks must have at least two states to indicate the level of completion but can have more (eg. backlog, in_progress, ..., complete). This is called COMPLETION STATE*
Group and projects:
Tasks can belong to 0 or many groups
A task can be a grouping (this will be called a project from here on); where other tasks that contain that grouping are considered sub tasks.
Tasks can belong to 0 or 1 project
A groups is simply a string that gives a name to categories of tasks.
All tasks that belong to a project must have the same NUMBER of completion states, but are able to have their individual state.
A project can also have states and is not restrained to the same number of states its 'children' (tasks that have the project as a group) have.
Projects can be nested
A group can have a description
A project inherits all task features but also lists all tasks that have it as a tag.
Reoccurring tasks:
A reoccurring task is a task that has either a CYCLE or a REFRESH SCHEDULE.
A REFRESH means that the task can occur again after being completed, returning to its initial completion state.
A REFRESH SCHEDULE is a 'custom number' of refreshes per a 'custom time period'.
A reoccurring tasks 'completion state' indicates the 'custom number' of completions, such that if the reoccurring task has a project it belongs to, it does NOT need to share the same number of completion states as its siblings
a CYCLE is an array of objects that contain a title extension, and a description extension.
when a reoccurring task has a CYCLE, it cycles through the array to modify its title and description upon REFRESH.
A reoccurring task must have one or both a CYCLE or a REFRESH TIMER.
How the app will cater productivity
There exists multiple ways to view tasks. Some ideas: GitHub commit board type widget
below are things that I think will not be part of my mvp:
Collaborative tasks and users
Users can make an online account with all the typical metadata (display name, profile picture, and what not)
Users can collaborate on tasks through collaboration spaces.
Storage solution
Data is always stored on device but users will have the choice to store data on a cloud service of their choice (eg, googledrive, OneDrive, Dropbox, or a homebrew server)
Give me recommendations for a tech stack and a step by step guide on what I need to do to deliver the MVP, including what industry-standard developer concepts they implement.