Back to projects

Freelance client portal

Workio

A connected workspace that brings freelancers, clients, projects, messages, time, and billing together.

DjangoPythonPostgreSQLFull-stack
Workio
I can model and build a connected, permission-aware business workflow—not just isolated CRUD screens.

01

Problem

Freelancers often manage leads, project scope, client communication, schedules, files, time, expenses, and invoices across disconnected tools. Workio brings that lifecycle into one workspace shared by freelancers and clients.

02

Role

Product design, workflow modeling, Django architecture, backend and frontend implementation, authorization, data design, testing, and deployment preparation.

03

Constraints

Freelancers and clients need different permissions over the same records. Financial data must stay traceable, invitations must expire safely, uploaded files must remain private, and state changes across proposals, milestones, time entries, expenses, and invoices must stay consistent.

04

Process

I modeled the freelance lifecycle as connected Django apps for accounts, projects, conversations, billing, and notifications. I built role-scoped querysets and permission checks first, then layered in reusable work templates, intake forms, proposals, scheduling, milestones, activity history, messaging, time tracking, expenses, invoicing, and dashboard summaries.

05

Result

A tested full-stack client portal where freelancers can move work from inquiry and proposal through delivery and payment while clients collaborate, review milestones, exchange files and messages, and track the same source of truth.

Experience highlights

  • Freelancer and client accounts with public profiles, invitations, and role-aware dashboards
  • Projects with tasks, milestones, files, comments, activity history, saved views, and workflow stages
  • Proposals, service offerings, intake questions, schedules, recurring work, and payment installments
  • Private conversations, attachments, unread states, and in-app or email notifications
  • Live timers, manual time entries, expenses, invoices, and traceable invoice line items

Engineering & performance

  • Django 5.2 domain apps keep accounts, projects, communication, billing, and notifications separated
  • Server-side authorization and user-scoped querysets protect shared project and financial records
  • Database constraints and transactional updates prevent duplicate billing and conflicting active timers
  • PostgreSQL is supported in production while SQLite keeps the local demo easy to run
  • Django test coverage exercises permissions, workflows, billing rules, notification delivery, and dashboard calculations

Kitty Kio

Thoughtful code can be useful, expressive, and a little bit magical.

Kitty Kio cat logo wearing a bucket hat

© 2026 Kitty Kio. Code is MIT licensed; content and branding are all rights reserved.