Open source · MIT · v1.0

One person.
One self-hosted system.

A single-user app that holds personal project management and lightweight freelance operations in one place. Self-hosted on your own server. No telemetry, no SaaS lock-in, no monthly bill.

Kybele Today dashboard with upcoming tasks, customer actions, and calendar events
What's inside

Two parallel workflows. One coherent app.

Kybele runs both your personal task system and your freelance operations in one place. A project is either yours or attached to a customer — the same views, tasks, and notes work for both.

Tasks — four views on the same data

List, Kanban, Table, Gantt. Hierarchical projects with subtasks, tags, priority, and due dates. Recurring tasks with five presets (daily / weekdays / weekly / monthly / yearly), DST + leap-year aware. Task dependencies with cycle detection.

  • Quick-capture parser (`tomorrow 2pm doctor #health !important +personal`)
  • Bulk multi-select operations
  • Saved-view filter combinations
  • Email reminders before due-date via SMTP cron
Tasks kanban view with drag-to-change-status columns

Cycles + modules — Plane-inspired

A cycle is a time-boxed sprint inside a project. Modules are thematic workstreams across cycles. Each cycle renders a per-day velocity bar chart so you can see what actually got shipped, not what you planned.

Cycle detail page with per-day velocity bar chart and task list

Notes — block editor with [[backlinks]]

Each note is an ordered list of typed blocks: paragraphs, headings, bulleted / numbered / todo lists, code, quote, divider, callout, image. Type [[ inside any block to open the backlink picker — search across customers, projects, tasks, and notes in parallel; filter by type with [[customer: or [[project:.

Notes block editor with paragraphs, headings, lists, code, and inline backlinks

Customers, contacts, pipeline

Track customers, their contact persons, deal stages, follow-up actions, and logged emails. The pipeline view is a kanban — drag deals across stages. Weighted forecast at the top reads Σ (value × win_probability) for non-closed deals.

Deal pipeline kanban with stages, drag-to-reorder cards, and weighted forecast

Proposals (PDF) + invoice tracking

Proposals with auto-incrementing numbering, EN + TR templates, line items, VAT, discount, validity. mPDF rendering with proper Turkish glyph coverage. Convert an accepted proposal to a project in one click.

In Turkey the legal invoice is the e-fatura issued via your GİB integrator. Kybele doesn't issue them — you upload the PDF and Kybele tracks the payment: partial payments, auto-overdue derivation, scheduled email reminders at 1 / 7 / 14 / 30 days past due.

Proposal detail page with line items, VAT, totals, status workflow, and PDF download
More on board

Calendar, reports, time, import, mobile

The dimensions you'd expect from a full PM tool, sized for one person.

Built-in calendar week view with drag-to-reschedule events

Calendar

Month / week / day views, drag-to-reschedule, recurring events with query-time expansion, optional one-way Google Calendar sync.

Reports dashboard with KPI tiles and Chart.js visualizations

Reports

Customers, projects, proposals, tasks, time, cashflow. Chart.js visualizations + CSV export with UTF-8 BOM that opens cleanly in Turkish-locale Excel.

Cashflow report — received, outstanding, overdue tiles and 12-month chart

Cashflow

Received this month, outstanding, overdue. Per-currency 12-month bar chart. Expenses module feeds the net cashflow picture.

Time tracking report — per-project totals and per-task drilldown

Time tracking

Live topbar timer attached to any task. Per-project hourly rate, customer-level override. Per-project totals + per-task drilldown report.

Bulk import form — CSV, Trello, Todoist, Notion adapters

Bulk import

CSV / Trello / Todoist / Notion adapters. Two-step preview → commit with new-project + new-tag diagnostics before you write.

Mobile PWA task list with bottom navigation and FAB

Mobile (PWA)

Install to iOS / Android home screen. Bottom navigation, 44px touch targets, mobile FAB. Offline shell caches the last 30 visited pages.

Boring on purpose

The stack you can still maintain in five years.

No frameworks, no build step, no npm pipeline, no transpiler. The frontend ships as the same HTML, CSS, and JavaScript a browser parses in 2026 will still parse in 2031.

The backend is plain PHP 8.3 with strict types and a 500-line custom MVC — small enough to read end-to-end on a Saturday. 457+ tests. CI on every push.

Language
PHP 8.3strict_types, custom MVC, no framework
Database
MariaDB 11 — utf8mb4, InnoDB, FULLTEXT
Web
nginx + PHP-FPM in Docker
Frontend
Vanilla JavaScript (ES2022) — no build, no transpiler
CSS
Bootstrap 5.3 + custom design tokens (anti-AI-slop palette)
Charts
Chart.js (vendored, loaded only on report pages)
Icons
Lucide SVG (inline sprite, no webfont)
PDF
mPDF 8 with DejaVu Sans (Turkish glyph coverage)
2FA
pragmarx/google2fa — RFC 6238 TOTP
Encryption
AES-256-GCM at rest for TOTP secrets + OAuth tokens
License: MIT. Self-host wherever you like.
Boundaries

What Kybele isn't, on purpose.

The discipline to leave things out is half the reason this works as a daily-use tool. If you need any of the below, Kybele is the wrong call — and that's a feature.

Not a team tool. Single user only — no signup screen, no roles, no permissions, no invitations.
Not a legal invoice issuer. You generate e-fatura via your GİB integrator; Kybele just tracks the payment against it.
Not AI-driven. No smart suggestions, no autogenerated content, no "intelligent" prioritization.
Not a SaaS. You self-host it. No telemetry, no phone-home, no usage analytics.
Not a native app. The PWA installs on iOS / Android home screens. No store submission ever.
Not a CRM in the marketing sense. No email automation, open tracking, read receipts, or customer-facing portal.
Talk

Want a copy, a custom build, or just to ask a question?

Kybele is open-source under MIT — you can self-host it directly from the repository. If you'd like a turn-key installation, custom modules, or a conversation about whether it fits your workflow, drop us a line.

mirket@mirket.io

Source on GitHub: github.com/barisozyurt/kybele-project