Web Services Platform

Web Services Platform
NENext.js 16REReact 19TypeScriptTATailwind CSS v4SassPostgreSQLPRPrisma ORMTATanStack Query v5TATanStack TableZuZustandZOZod v4AXAxiosTITiptapECEChartsANAnthropic SDKOCOctokitJWJWTBCbcryptRARadix UILULucide ReactREreact-toastifyNTnext-themesVIVitestAWSAWS Amplify

Features

10 shipped5 in progress3 planned

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

10 fields
idInt (PK, autoincrement)
nameString
emailString (unique)
passwordString
avatarString?
isVerifiedBoolean

Platform users. role controls access: ADMIN manages everything, USER is a client, DEVELOPER is assigned tasks.

7 fields
idInt (PK, autoincrement)
userId→ User
refreshTokenString (unique)
userAgentString?
ipAddressString?
createdAtDateTime

JWT refresh token sessions. Tracks browser/IP for security audits. Expires at expiresAt.

7 fields
idString (uuid, PK)
typeString
titleString
messageString
payloadJson
readBoolean

In-app notifications. No user FK — filtering is done application-side via type/payload. Stored in ui_notifications table.

8 fields
idString (uuid, PK)
nameString
emailString (unique)
phoneString?
isDeletedBoolean
createdAtDateTime

Business clients who place service orders. Soft-deleted via isDeleted + deletedAt.

11 fields
idInt (PK, autoincrement)
uniqueIdString (unique)
nameString (unique)
slugString
descriptionString
techStackString[]

Offered services (e.g. landing page, e-commerce). Each has features, a pricing config, and can be ordered by clients.

8 fields
idInt (PK, autoincrement)
uniqueIdString (unique)
nameString
descriptionString?
isDeletedBoolean
createdAtDateTime

Reusable feature definitions (e.g. 'Responsive Design', 'SEO optimization'). Linked to services via ServiceFeature.

13 fields
idString (uuid, PK)
orderNoInt (unique, autoincrement)
projectNameString?
serviceId→ Service
clientId→ Client
initialPriceDecimal

Core order entity. totalPrice is always computed server-side, never accepted from client. status drives the lifecycle from PENDING_REVIEW through DONE.

13 fields
idInt (PK, autoincrement)
uniqueIdString (unique)
serviceId→ Service
featureId→ Feature
typeSTANDARD | OPTIONAL | OTHER
isIncludedBoolean

Join table between Service and Feature. Stores pricing details per combination. Unique constraint on (serviceId, featureId).

11 fields
idInt (PK, autoincrement)
serviceId→ Service (unique)
hourlyRateDecimal
markupRateDecimal
fixedCostsDecimal
taxRateDecimal

One-to-one pricing config per service. hourlyRate + markupRate compute totalPrice server-side. displayModel controls how price is shown to clients.

15 fields
idString (uuid, PK)
orderId→ ServiceOrder
nameString
descriptionString?
quantityInt
unitPriceDecimal?

Line items within an order. showPrice controls client-facing visibility. Prices stored internally; totalPrice never accepted from client.

8 fields
idString (uuid, PK)
orderId→ ServiceOrder
notesString
statusDRAFT | CONFIRMED
aiResponseJson?
summaryString?

Discussion journal per order. AI suggestions stored in aiResponse. When CONFIRMED, linked items are locked and the order moves forward.

10 fields
idString (uuid, PK)
titleString
statusNOT_STARTED | IN_PROGRESS | DONE | TESTED
orderItemId→ ServiceOrderItem?
orderId→ ServiceOrder?
assigneeId→ User?

Implementation tasks linked to an order or order item. Synced with GitHub Issues via githubIssueId/githubUrl. Assigned to a DEVELOPER user.

5 fields
idString (uuid, PK)
taskId→ Task
authorIdString (Client.id, no FK)
messageString
createdAtDateTime

Comments on tasks. authorId stores Client.id but has no DB-level FK constraint. Indexed on taskId for fast lookup.