Week 1 — CLI Task Manager

Terminal Utility · Java


The Idea

Every developer ends up building a to-do app at some point — but most of them are throwaway exercises. This one isn't. You're building a task manager you could actually use: something that runs in your terminal, remembers what you've added, and helps you stay on top of what needs doing.

The interesting design challenge is that not all tasks are the same. Some have a hard deadline — finish by Friday or it's too late. Others repeat — take out the bins every Sunday, review notes every morning. These feel like the same thing on the surface ("a task") but behave completely differently when you ask "is this due right now?" That distinction is what this project is built around.

You decide what the interface looks and feels like, what information a task stores, and what the command names are. You also decide whether tasks belong to projects, whether there are categories or priorities, and what "done" actually means for a recurring task. The only constraint is that your system can handle both deadline-based and recurring tasks, and treats them uniformly when displaying and checking them.


Week 1 — Build Your Task Hierarchy

This week is about modelling what a task is before worrying about filtering, persistence, or the full CLI.

This week's topic: classes and subclasses.

You need to capture that all tasks share some things (a title, a priority, tags) but differ in how they decide whether they're currently due. That's the core split.

You need:

By the end of week 1 you should be able to start the program, add a couple of tasks of different types, and list them all back.

What you decide:

The logic inside isDue() doesn't need to be perfect yet — a simple check is fine. You'll refine it in later weeks.