Skip to content
Back to all projects
Company Project

Client Delivery Portal

An internal-facing portal at Maxcode IT Solutions for clients to track project milestones, invoices, and support tickets.

Demo & repo links coming soon
Role
Full stack developer (Maxcode IT Solutions)
Timeline
2026
Status
In production — Maxcode IT Solutions
Team
Team of 3 — 1 designer, 2 engineers

Tools

Next.jsTypeScriptPostgreSQLDockerAWSGitHub Actions
Client Delivery Portal cover image

Overview

Dummy placeholder — a company project at Maxcode IT Solutions to replace ad-hoc email updates with a self-serve client portal. Clients can track delivery milestones, view and download invoices, and raise support tickets — reducing the account team's manual status-update overhead.

The Problem

Dummy placeholder — account managers were sending manual status-update emails for every client project, and clients had no way to self-serve basic information like invoices or ticket status.

Architecture

Frontend

Next.js dashboard with role-based views for clients vs. internal staff.

API

TypeScript API layer syncing milestone data from the internal project-management tool.

Data

PostgreSQL for portal-specific data (invoices, tickets), joined against synced project data.

Deploy

Dockerized services deployed to AWS with GitHub Actions handling CI/CD.

Key Features & My Role

  • Milestone tracking synced from the internal project-management tool
  • Self-serve invoice viewing and PDF download
  • Support ticket system with email notifications
  • CI/CD pipeline for zero-downtime deploys via GitHub Actions

Video Walkthrough

Video walkthrough coming soon

Outcomes & Results

  • Dummy placeholder — reduced manual status-update emails from the account team by an estimated 70%.
  • Clients can now self-serve invoice downloads instead of emailing accounts.
  • Support tickets route directly into the team's existing workflow instead of a shared inbox.

Reflection

Dummy placeholder — syncing state from an external project-management tool without it becoming a second source of truth was the real design challenge. We landed on treating the portal's database as a read-optimized cache rather than a system of record.