- About
- Features
- Getting Started
- Technical Architecture
- Development
- Contributing
- Deployment and Release
- License
Taskly is a simple and intuitive task management tool built with Racket. It provides a clean graphical interface for efficiently creating, organizing, and tracking tasks. Whether you're managing personal to-dos or team projects, Taskly helps you stay organized and focused.
For end-user documentation, please visit our GitHub Pages.
- β Create, edit, and delete tasks with ease
- π Organize tasks into customizable lists
- π Set due dates with smart shortcuts (e.g., "tomorrow", "next week")
- π― Mark tasks as complete with visual feedback
- πΎ Automatic data persistence using SQLite
- π Cross-platform compatibility (Windows, macOS, Linux)
- π¨ Simple and clean user interface
- π Multi-language support
- Racket 8.0 or later
- Git
-
Clone the repository
git clone https://github.com/jrtxio/taskly.git cd taskly -
Build the application
- On Windows:
./build.ps1 - On macOS/Linux:
./build.sh
- On Windows:
racket src/taskly.rktTaskly follows a modular architecture with clear separation of concerns:
-
core/: Core functionality including task management, list management, and database operations
database.rkt: SQLite database operations and schema managementlist.rkt: Task list management (CRUD operations)task.rkt: Task management (CRUD operations, due date handling)
-
gui/: Graphical user interface components built with Racket GUI toolkit
main-frame.rkt: Main application window and layoutsidebar.rkt: Sidebar with list navigationtask-panel.rkt: Task display and management paneldialogs.rkt: Dialog boxes for task and list operationslanguage.rkt: Multi-language support
-
utils/: Utility functions for various operations
date.rkt: Date and time handling, including smart shortcut parsingpath.rkt: File path management and database file handling
-
tests/: Comprehensive test suite
- Unit tests for core functionality
- Integration tests for end-to-end workflows
- Edge case testing
- User interacts with GUI components
- GUI events trigger core functionality calls
- Core functions perform database operations via SQLite
- Database changes are reflected in the GUI
- All data is automatically persisted
Taskly uses SQLite for data persistence with a simple schema:
-- Lists table
CREATE TABLE IF NOT EXISTS lists (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
created_at TEXT NOT NULL
);
-- Tasks table
CREATE TABLE IF NOT EXISTS tasks (
id INTEGER PRIMARY KEY AUTOINCREMENT,
title TEXT NOT NULL,
description TEXT,
due_date TEXT,
completed INTEGER DEFAULT 0,
list_id INTEGER,
created_at TEXT NOT NULL,
FOREIGN KEY (list_id) REFERENCES lists(id)
);Taskly has a comprehensive test suite to ensure functionality works as expected:
# Run all tests
racket tests/run-all-tests.rkt
# Run specific test files
racket tests/test-task.rkt
racket tests/test-list.rkt- All code follows Racket's style guide
- Modules are designed to be independent and testable
- Comments are used to explain complex logic
- Follow functional programming principles where appropriate
- Use Racket's built-in debugger for GUI applications
- Enable verbose logging for database operations
- Test core functionality in isolation before GUI integration
- Use
displaylnfor quick debugging output
Contributions are welcome! Whether you're reporting bugs, suggesting new features, or submitting code changes, we appreciate your help.
- Fork the repository
- Create a feature branch (
git checkout -b feature/your-feature) - Make your changes
- Run the test suite to ensure everything works
- Commit your changes with a descriptive message
- Push to the branch (
git push origin feature/your-feature) - Open a pull request
- All changes must pass the test suite
- Code must follow the project's style guide
- Changes should be focused and minimal
- Add tests for new functionality
- Write clear commit messages
- Run the appropriate build script for your platform
- The build process compiles the application and prepares distribution packages
- Distribution packages are generated in the
dist/directory
- Releases are managed through GitHub Releases
- Version numbers follow semantic versioning (MAJOR.MINOR.PATCH)
- Release notes are generated from commit messages
- GitHub Actions are used for continuous integration
- Tests are run on every push to the main branch
- GitHub Pages are automatically deployed on every push to the main branch
Taskly is licensed under the MIT License. See the LICENSE file for details.
Built with β€οΈ using Racket