A desktop version of the calendar task display
  • C++ 65.7%
  • C 33.2%
  • Python 1.1%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-08-21 21:39:30 +02:00
docs Updated README and added some showcase images 2026-08-21 21:20:51 +02:00
icons Initial commit — mArk desktop task viewer 2026-04-13 13:12:26 +02:00
src Rename project to Takt-Screen as we have move away from the original project. 2026-08-21 21:31:17 +02:00
.gitignore Refactored task providers and added selfhosted Vikunja support 2026-06-03 23:14:05 +02:00
esp32-s3-devkitc-1-myboard.json Initial commit — mArk desktop task viewer 2026-04-13 13:12:26 +02:00
partitions.csv Initial commit — mArk desktop task viewer 2026-04-13 13:12:26 +02:00
platformio.ini Fixed touchscreen issues by switching driver 2026-08-21 20:30:15 +02:00
README.md Be more transperant about AI usage 2026-08-21 21:39:30 +02:00

Takt Screen — CrowPanel 5.0" ESP32-S3

A dedicated desktop task and daily rhythm display that pulls tasks, calendar events, and to-do feeds from cloud and self-hosted services, displayed on an Elecrow CrowPanel 5.0" capacitive touchscreen (800×480).

Takt (noun, Swedish): Rhythm, cadence, pace, or beat. A dedicated desk display designed to keep your daily tempo, habits, and task flow in rhythm without distractions.

Note: This project is vibe-coded — designed and built through AI-assisted pair programming.


Single Task View List View
Single Task View List View
On-Device Settings Boot & Sync
On-Device Settings Boot & Initialization

Hardware

Component Details
Display Elecrow CrowPanel 5.0" ESP32-S3 (800×480, RGB parallel 16-bit)
MCU ESP32-S3 (Dual-core Xtensa LX7 @ 240MHz, 8MB PSRAM, 8MB Flash)
Touch Capacitive Touch (GT911 via I2C)
Audio Built-in speaker / NS4168 I2S amplifier

Features

  • Multi-Provider Task Integration:
    • Vikunja: Connects to self-hosted Vikunja instances via REST API with bidirectional completion sync and priority sorting.
    • Joplin Server: Direct Joplin Server sync with timestamp-based delta caching (sub-second query times), E2EE detection, and bidirectional completion updates.
    • Google Calendar: Integrates with the official Google Calendar v3 events API.
    • iCal / ICS: Directly downloads and parses any standard .ics calendar URL.
    • Local Tasks: On-device flash storage for offline tasks.
  • Dynamic Task Limits: Configurable total task pool (default 50) split automatically and evenly across active providers.
  • Gamification & Persistent Score: Daily completion count and score progress arc persist across reboots, syncs, and backend task archiving.
  • Dual Display Modes:
    • Single Task View: Distraction-free focus mode with completion streak and progress ring.
    • List View: Scrollable checklist for high-density overview.
  • Themes: Dieter Rams inspired Light Theme and OLED-friendly Dark Theme.
  • Hardware & System Monitor: Live CPU clock speed and real-time RAM / heap utilization in the settings overlay.
  • Local Web Admin: Built-in responsive web dashboard (http://<device-ip>/) to configure providers, API tokens, display timeouts, and sync intervals without reflashing.

Setup

1. Credentials

Copy the example file and configure your WiFi credentials:

cp src/credentials.h.example src/credentials.h

Edit src/credentials.h:

#define WIFI_SSID     "your-wifi-ssid"
#define WIFI_PASSWORD "your-wifi-password"
#define GCAL_API_KEY  "your-google-calendar-api-key"

credentials.h is gitignored and never committed.

2. Build & Flash

# Build and upload via USB
pio run -t upload

# Open serial monitor
pio device monitor

Project Structure

.
├── platformio.ini              # PlatformIO environment & library dependencies
├── partitions.csv              # Custom flash partition table
├── docs/                       # Screenshots and documentation assets
└── src/
    ├── main.cpp                # App initialization, main loop, and power management
    ├── display_driver.h        # LovyanGFX RGB & GT911 touch integration
    ├── task_manager.h          # Global task store, NVS completion cache & scoring
    ├── task_config_store.h     # Provider credentials and device settings store
    ├── streak_store.h          # Gamification streak & leveling engine (NVS WAL)
    ├── wifi_manager.h          # WiFi reconnection & NTP time sync
    ├── web_server.cpp          # Embedded web portal dashboard
    ├── providers/
    │   ├── task_provider.h     # Abstract provider interface
    │   ├── provider_registry.h # Provider registry and fetch coordinator
    │   ├── provider_vikunja.h  # Vikunja REST API provider
    │   ├── provider_joplin.h   # Joplin Server API & cache provider
    │   ├── provider_gcal.h     # Google Calendar provider
    │   ├── provider_ical.h     # iCal / ICS feed parser
    │   └── provider_local.h    # Local flash storage provider
    ├── ui_common.h             # Palette, geometry, and styling constants
    ├── ui_taskviewer.cpp       # LVGL Single & List task viewer UI
    ├── ui_settings.cpp         # On-device settings overlay & hardware monitor
    ├── ui_completion.cpp       # Daily completion celebration screen
    ├── ui_initialization.cpp   # Boot progress bar
    └── fonts/                  # Custom Montserrat & DejaVu Bold LVGL fonts

Troubleshooting

  • Touch not responding: Verify your GT911 I2C address (0x14 or 0x5D); the driver auto-detects both addresses.
  • Provider Connection Failed: Open the Web Admin (http://<device-ip>/) to verify API tokens and endpoints.
  • WiFi Disconnected: Check credentials.h SSID/password or monitor serial output via pio device monitor.