Web Services Platform

Features
Shipped10
- Auth (Login / Sign-up)
- Public — About
- Public — Contact
- Public — Portfolio
- Services (Listing)
- Service Detail Page
- Service Inquiries
- Admin Panel
- Order Discussions
- Client Dashboard
In Progress5
- Public — Home
- Orders
- Client Workspace (My Projects)
- Tasks
- Notifications
Planned3
- Invoices
- Payments
- GitHub Integration
Database schema
Platform users. role controls access: ADMIN manages everything, USER is a client, DEVELOPER is assigned tasks.
JWT refresh token sessions. Tracks browser/IP for security audits. Expires at expiresAt.
In-app notifications. No user FK — filtering is done application-side via type/payload. Stored in ui_notifications table.
Business clients who place service orders. Soft-deleted via isDeleted + deletedAt.
Offered services (e.g. landing page, e-commerce). Each has features, a pricing config, and can be ordered by clients.
Reusable feature definitions (e.g. 'Responsive Design', 'SEO optimization'). Linked to services via ServiceFeature.
Core order entity. totalPrice is always computed server-side, never accepted from client. status drives the lifecycle from PENDING_REVIEW through DONE.
Join table between Service and Feature. Stores pricing details per combination. Unique constraint on (serviceId, featureId).
One-to-one pricing config per service. hourlyRate + markupRate compute totalPrice server-side. displayModel controls how price is shown to clients.
Line items within an order. showPrice controls client-facing visibility. Prices stored internally; totalPrice never accepted from client.
Discussion journal per order. AI suggestions stored in aiResponse. When CONFIRMED, linked items are locked and the order moves forward.
Implementation tasks linked to an order or order item. Synced with GitHub Issues via githubIssueId/githubUrl. Assigned to a DEVELOPER user.
Comments on tasks. authorId stores Client.id but has no DB-level FK constraint. Indexed on taskId for fast lookup.