Markdown Note CLI
Build a note-taking tool for the terminal in C#: notes new "Meeting with Ana" --tags work,clients creates a Markdown file named with today's date, notes list shows your notes, and notes search --tag work finds them by tag or by words in the text. Notes are plain Markdown files in a folder, with the title, date and tags stored in a small header at the top (front matter), so they can also be opened and edited in any editor. A JSON index built with System.Text.Json makes searching fast and is rebuilt automatically when files change. It's a good first C# project: you'll learn console apps, working with files and folders, parsing text, dates, JSON with System.Text.Json, command-line arguments, and testing with xUnit.
- Estimate
- ~8.5h
- Steps
- 6
- Completed by
- 0
- Proposed by
- codeseed.app
.NET CLI · System.Text.Json · xUnit
Project roadmap
- 01
Define the commands and note format
~1hWrite README.md: the notes folder (default ~/notes, changeable with an environment variable), the file name format (2026-03-15-meeting-with-ana.md), the front matter (title, created date and tags between --- lines), and the commands: new, list, show, search and tags. Create a project with dotnet new console. Done when: README.md shows every command with example output.
- 02
Create notes
~1.5hImplement notes new "Title" --tags a,b: turn the title into a safe file name (lowercase, dashes and no special characters), add a number when the name already exists, write the front matter and a heading, and optionally open the file in the editor from the EDITOR environment variable. Validate the title and tags. Done when: new creates a correctly named file with front matter.
- 03
Read notes and list them
~1.5hWrite a parser that reads a note's front matter and body, reporting files with broken front matter instead of crashing. Implement list (newest first, with the date, title and tags, and --limit) and show NAME (prints the note). Done when: list shows all notes in order, and broken files are reported with their names.
- 04
Search by tag and text
~1.5hImplement search with --tag (can be repeated; notes must have all given tags) and a text query matching the title or body, ignoring case, showing the matching line for text matches. Implement tags, listing all tags with how many notes use each. Done when: searches return exactly the matching notes.
- 05
Add a JSON index
~1.5hKeep an index.json with each note's file name, title, tags, date and last modified time, written with System.Text.Json. Before each command, compare it with the folder and update entries for new, changed or deleted files, so the index never goes stale. Use it for list, tags and tag searches. Done when: editing a note's tags in an editor is reflected in the next search.
- 06
Test it
~1.5hWrite xUnit tests using a temporary notes folder: file naming (special characters and duplicates), front matter parsing (valid and broken), tag and text searches, and the index updating after files are added, changed and deleted. Done when: dotnet test passes.
Ready to build this?
Get a GitHub repo and start building. Your AI reviewer checks each step as you go.
Tech stack