AppyPlace is a full-stack monorepo application for discovering and reviewing places. It features a modern tech stack with a focus on type safety, performance, and developer experience.
- Runtime: Node.js
- Framework: Hono
- API: GraphQL using GraphQL Yoga and Pothos (Code-first schema)
- Database: PostgreSQL with Prisma ORM
- Authentication: Better Auth
- Storage: S3-compatible storage (RustFS in dev)
- Observability: OpenTelemetry with Jaeger
- Framework: React with Vite
- Routing: TanStack Router
- State/Data Fetching: Apollo Client
- Forms: TanStack Form
- Styling: Tailwind CSS
- Maps: Mapbox GL
- UI Components: Shadcn
- Package Manager: pnpm (Workspaces)
- Containerization: Docker & Docker Compose
- Testing: Playwright (E2E), Vitest (Unit)
Before running the project, ensure you have the following installed:
- Node.js (v20 or higher)
- pnpm (v9 or higher)
- Docker and Docker Compose
-
Clone the repository:
git clone <repository-url> cd appyplace
-
Install dependencies:
pnpm install
-
Environment Setup:
Backend: Navigate to the backend directory and set up the environment variables:
cd apps/backend cp .env.example .envNote: Update the
.envfile with your specific configuration if needed. For development, the defaults usually work with the provided Docker setup.Frontend: Navigate to the frontend directory and set up the environment variables:
cd ../frontend cp .env.example .envNote: You MUST provide a valid Mapbox token in
VITE_MAPBOX_TOKENfor the maps to work. Return to root:cd ../.. -
Start Infrastructure:
Start the database, object storage, and tracing services using Docker:
# From the root directory pnpm --filter backend dev:up -
Initialize Database:
Run migrations and seed the database:
pnpm --filter backend dev:setup
-
Run the Application:
Start both the backend and frontend in development mode:
pnpm dev
- Frontend: http://localhost:5173
- Backend API: http://localhost:3001/graphql
- Prisma Studio:
pnpm --filter backend studio(http://localhost:5555) - Jaeger UI: http://localhost:16686
- RustFS Console: http://localhost:9001 (Ensure a bucket named
appyplaceexists)
pnpm dev: Start both frontend and backend in development mode.pnpm dev:backend: Start only the backend.pnpm dev:frontend: Start only the frontend.pnpm build: Build all applications.pnpm test: Run frontend unit tests.pnpm e2e: Run E2E tests with Playwright.pnpm lint: Lint the codebase using Oxlint.
/
├── apps/
│ ├── backend/ # Node.js/Hono/GraphQL Backend
│ └── frontend/ # React/Vite Frontend
├── packages/ # Shared packages (if any)
└── ...