---
title: "Pawggo: Singapore Pet Import Hub"
description: "Case study: building Pawggo, a Singapore inbound pet-import concierge product. One form fills four government systems (AVS, PALS, Customs, iFAST/CAPQ). NestJS + Prisma + Postgres API, Next.js web app, WorkOS authentication, and AWS CDK infrastructure."
doc_version: 1
last_updated: 2026-05-25
canonical: https://variable.team/projects/pawggo
---

<!--
  Source of truth: app/projects/pawggo/page.tsx. Keep the h1 in sync.
  scripts/check-markdown-drift.ts verifies this in pre-commit.
-->

# Pawggo

- **Company:** [Pawggo](https://pawggo.com)
- **Industry:** Pet Travel / Compliance
- **Dates:** Mar 2026 to Present
- **Project link:** <https://staging.pawggo.com>
- **Stack:** Next.js, React, TypeScript, MUI, NestJS, Prisma, Postgres, WorkOS,
  AWS, CDK, ECS Fargate, pnpm

### One form populates four government systems

Moving a dog from the US into Singapore touches four agencies: AVS for the
import licence, PALS for the local dog licence, Customs for GST clearance,
and iFAST plus CAPQ for the quarantine inspection. Each portal asks for the
same facts in different shapes, and a typo in one field can hold up the
whole import. Pawggo asks the importer once. The Hub collects owner
identity, residence, pet details, transport mode, and travel dates, then
generates pre-filled guides for each of the four systems with the values
shaped to match what that portal expects.

### A Singapore Import Timeline that surfaces the next deadline

Singapore pet import runs on a sequence of windows: rabies titre at least
30 days before travel, AVS licence inside its 60-day validity, CAPQ booking
within the import slot, arrival inside the 14-day Declaration of Facts
window. The Hub renders this as a phased timeline keyed off the travel
date and the pet's residence history, so an importer sees the next thing
to do rather than a wall of regulation. Cross-breed dogs, controlled
countries, and shorter residency histories all branch the timeline at the
right step.

### Step-by-step checklists with copy-to-clipboard for every portal field

Each of the four government systems gets its own card with the actual
click path: sign in to PALS with Singpass, submit the licence application,
pay the licence fee, receive the payment slip, then submit it to AVS.
Field values are one click away from the importer's clipboard, so they
paste rather than retype. Status lives on the card, which keeps partial
state visible across sessions.

### AVS-recognized pet agent directory with self-managed as a first-class path

Owners can ship via an AVS-recognized agent or self-manage the customs
clearance and inspection booking. The Hub shows both paths side by side
with the trade-offs visible: which agents handle Singapore transport,
which integrate with CAPQ booking, and what a self-managed path adds to
the importer's workload. The directory cards link directly to the agent's
contact details and the booking slots they cover.

### From a static prototype to a real product with accounts and persistence

The pre-MVP shipped as a statically generated Next.js app with
LocalStorage-persisted dashboard state, which let design-partner
households run the concierge playbook end to end without waiting for a
backend. I'm now growing the repo into a pnpm workspace monorepo: a
NestJS + Prisma + Postgres API at `apps/api`, the existing Next.js Hub at
`apps/web`, an Operations Admin Panel for Pawggo employees, and WorkOS
AuthKit so every page on `apps/web` flows through the proxy. The AWS CDK
infrastructure covers VPC, ECS Fargate, RDS with TLS verify-full,
CloudWatch alarms with threshold bands, VPC flow logs to S3, and
credential rotation on a configurable cadence.

## Sitemap

[Full site index](/sitemap.md)
