Skip to content
karim.semaan(open to work)
WorkExperienceAboutSkillsContactResume ↓
← All work
TimeSheet Platform preview
Full-stackProtected2025

TimeSheet Platform

Enterprise time-tracking SaaS

Full-stack · PreviewTimeSheet PlatformEnterprise time-tracking SaaS

Self-hosted enterprise app. Client source, branding, and data are private.

Protected work

Built in-house as AI Solutions Lead at BDO (a regional accounting & audit firm), so source, branding, and data are confidential. Happy to walk through the architecture.

Request access

A substantial full-stack enterprise app that digitizes time tracking, customer/employee management, and reporting for a professional-services firm. The Flask 3 + SQLAlchemy 2 + PostgreSQL backend exposes 17 route modules: JWT auth with Argon2id and RBAC, a multi-level company hierarchy with approval workflow, an audit log, automated email reminders, and an analytics service (SQL aggregation, YoY comparisons, productivity heatmaps, PDF/CSV report generation). The React + TypeScript frontend uses TanStack Query/Router and rich charting. Shipped with Docker Compose + Caddy TLS and broad test coverage; it migrated ~295k task rows off legacy MS Access.

  • React
  • TypeScript
  • Flask 3
  • SQLAlchemy 2
  • PostgreSQL
  • Alembic
  • JWT / Argon2
  • ReportLab
  • Docker
  • Caddy

Architecture · legacy Access → audited time-tracking SaaS

  1. 01

    Data migration

    ~295k task rows migrated off a legacy MS Access database into PostgreSQL.

  2. 02

    Time capture + approval

    Employees log time through a multi-level company hierarchy with an approval workflow.

  3. 03

    Auth + audit

    JWT / Argon2id auth with RBAC and a full audit log across 17 route modules.

  4. 04

    Analytics

    A reporting service runs SQL aggregations, YoY comparisons, and productivity heatmaps.

  5. 05

    Reports + delivery

    Generates PDF/CSV reports; self-hosted via Docker Compose + Caddy TLS.

Rows migrated
~295,000 (from MS Access)
Records
350+ employees · ~1,670 customers
Tests
41 files
API modules
17
Private · request access
Want something like this? Get in touch →
© 2026 Karim SemaanBuilt with Next.js, Tailwind & Supabase.LinkedIn ↗GitHub ↗