Building
Full StackOperations

ChessDesk

A lightweight operations and business-management app for independent chess coaches in South Africa.

Status

Building

Focus

Full Stack, Operations

Primary Stack

Python + FastAPI

Type

Case Study

See the workflow in action

Four screens show how ChessDesk brings the day-to-day work of a chess coaching business into one focused workspace.

DashboardA financial and activity overview for the coaching business.
Client managementKeep student and school relationships, contacts, and balances together.
Session schedulingSee upcoming, completed, and cancelled coaching sessions at a glance.
Expense trackingTrack categorized spend and keep the real cost of coaching visible.

Overview

ChessDesk is a single-user web app that gives independent chess coaches one place to manage students, parents or guardians, school clients, sessions, communication, invoices, payments, expenses, and basic business performance.

Individual students with parent or guardian contact details and school clients

Session lifecycle from scheduling through completion, cancellation, and updates

Automatic session communication through WhatsApp, email, or both when enabled

Flexible manual invoicing, external payment records, and private expense tracking

Dashboard metrics for revenue, payments received, outstanding amounts, expenses, and net income

Why I Built It

ChessDesk is an exploration of focused operations software for independent chess coaches in South Africa. The product specification starts with a simple need: manage the coaching day and understand the business financially from one place.

The project is deliberately domain-shaped rather than a generic task list. It treats students, parents or guardians, schools, sessions, communication, invoices, payments, and private expenses as connected parts of a coaching business.

The Problem

Problem statement

Independent coaches often manage their day across spreadsheets, calendars, invoices, and messaging apps. ChessDesk brings those day-to-day records together without trying to replace accounting or payment platforms.

An independent coach may manage roughly 1–20 students, a few schools, or a mixture of both. When client details, schedules, payment records, and expenses live in separate tools, the same information gets entered more than once and the overall state of the business is harder to see.

ChessDesk focuses on that operational gap while staying intentionally small. It is not an accounting replacement, payment gateway, parent portal, or school portal; it is a fast workspace for the coach.

The Solution

The MVP is organized around the coach’s real sequence of work: schedule a session, coach it, mark it complete, communicate with the client, invoice one or more sessions, and record an external payment.

The FastAPI backend uses SQLAlchemy persistence and a checked-in OpenAPI contract. A Next.js frontend consumes the API through service modules, while SQLite supports local development and PostgreSQL remains available for a larger deployment.

Tech Stack

Python
FastAPI
SQLAlchemy
Next.js
TypeScript
SQLite / PostgreSQL

Technical Decisions

Keep the API contract in the repository

The checked-in OpenAPI document gives the frontend and backend a shared boundary. It makes resource names, authentication behavior, and response shapes reviewable before a consumer has to discover them by trial and error.

Support cookie and bearer authentication

The backend accepts the HttpOnly session cookie used by the browser and bearer credentials for API clients and tests. That keeps the normal web experience secure while leaving the service straightforward to exercise outside a browser.

Separate operational areas into routers and services

Clients, sessions, invoices, expenses, and dashboard data have different responsibilities. Keeping those boundaries visible in the backend makes it easier to reason about permissions and future changes than putting every workflow into one large route module.

Use SQLite locally and keep PostgreSQL available

SQLite makes the project easy to run and test without extra infrastructure. PostgreSQL remains supported for environments that need a server database, which keeps local setup fast without closing off a production-oriented path.

Challenges

Keeping frontend and backend behavior aligned

The frontend depends on several related service modules, so a small contract mismatch can show up as a broken dashboard, schedule, or form. Keeping the API document, service code, and backend tests together makes those mismatches easier to locate.

Representing different client workflows

The repository distinguishes individual students from school clients. That is a small but important domain decision: the forms and records need to reflect how a coach actually works with each type instead of forcing both into an overly generic client shape.

Making authentication testable

Authentication has to work through the browser cookie path and through direct API requests. The backend tests cover signup, login, protected requests, and duplicate-account behavior so the security boundary is exercised without relying only on the UI.

What I Learned

A small product benefits from explicit domain boundaries just as much as a large one.

A checked-in API contract is useful documentation and a practical coordination tool.

Local defaults should make the first run easy without hiding the path to a stronger deployment database.

Authentication behavior is worth testing through every supported client path.

Current Status

building

ChessDesk is actively in development. The repository contains the current implementation, tests, and setup path; there is no public demo URL attached yet.

System Design

ChessDesk — Eleazar Nhamuave