This document provides context and collaboration guidelines for AI coding assistants working in the Tasklog repository.
It explains:
- the purpose of the project
- the development philosophy
- how AI should assist during development
- which documents define system rules
AI assistants should read this file before proposing or implementing changes.
Tasklog is a self-hosted task management application built as a personal alternative to subscription-based task apps.
The project began from a simple frustration: paying for a Todoist subscription for functionality that could be implemented independently.
Rather than recreating a full productivity platform, Tasklog focuses on building a simple, understandable task system that evolves over time.
The project is also intended to demonstrate iterative software evolution — starting from a minimal system and gradually expanding its capabilities.
Tasklog started as a minimal system to replace a paid todo application.
The goals were:
- avoid recurring SaaS subscriptions
- retain full ownership of task data
- build something understandable end-to-end
- evolve the system gradually rather than designing everything upfront
The system is now on v2 - a .NET Web API backend and Next.js frontend.
See CHANGELOG.md for history and docs/architecture.md for current structure.
The development philosophy for Tasklog emphasizes clarity and gradual evolution.
Key principles:
The system should remain understandable by a single developer.
Avoid unnecessary complexity and frameworks unless they clearly improve the system.
Prefer readable, explicit solutions over clever or overly abstract designs.
Future maintainability is more important than short-term optimization.
The system should evolve version by version.
Major changes should happen in clearly defined phases rather than large uncontrolled rewrites.
The goal is to understand the entire system:
- backend
- frontend
- database
- deployment
Design decisions should support that goal.
AI assistants (such as Claude Code) should follow these collaboration rules when contributing to the repository.
For non-trivial changes:
- Explain the proposed approach briefly.
- Outline the implementation plan.
- Then generate code if appropriate.
Large architectural changes should not be implemented without discussion.
When generating code:
- follow the architecture rules defined in the architecture document
- respect repository structure
- place logic in the correct layer
Do not introduce new structures without justification.
Do not introduce additional frameworks or libraries unless there is a clear benefit.
The system should remain lightweight and understandable.
If a task is ambiguous:
- ask clarifying questions
- do not guess requirements
Clear understanding is preferred over rapid implementation.
Always read docs/architecture.md before proposing or implementing changes.
It defines the current system structure, layer responsibilities, API contract, data model, and known limitations. It is the primary reference for any code work.
Also read before making changes:
docs/product-design.md- what the product is, who it's for, feature rulesdocs/engineering-guidelines.md- patterns to follow, patterns to avoid
Code generated for this project should follow these preferences:
Prefer:
- clear naming
- small focused classes
- modular services
- readable code
Avoid:
- overly complex abstractions
- large monolithic files
- mixing responsibilities across layers
Code should prioritize maintainability and clarity.
When assisting with development tasks:
- Explain the approach briefly.
- Provide a short implementation plan for complex changes.
- Highlight architectural impacts if relevant.
- Ask questions when requirements are unclear.
The goal is collaborative development rather than automatic code generation.
Tasklog is intended to be:
- understandable
- maintainable
- incrementally evolving
Prefer solutions that are:
- simple
- modular
- aligned with the project philosophy
If a change affects system architecture or project structure, highlight the impact before implementing it.