The Problem
Paphos has a growing international community — expats, remote workers, retirees — but no central place to find out what’s happening locally. Event info was scattered across dozens of WhatsApp groups, Facebook posts, and word of mouth. People kept asking the same question: “Where do I find events and meet people?”
I built Paphos Community to answer that. One app where you can browse upcoming meetups, RSVP with your guests, and discover the 55+ WhatsApp groups that already exist for everything from business networking to arts and crafts.
How It Works
The home screen shows upcoming events at a glance. Each event card displays the date, time, venue, participant count vs. capacity, and a status badge — Confirmed when the minimum number of people have joined, Needs people when it still needs RSVPs. Two primary actions sit at the top: jump to the WhatsApp directory or create a new event.
Event Details & RSVP
Tapping an event opens the full details: description, Google Maps link, and the participant list. Users can join with one tap, optionally bringing guests with a +/- counter. Event creators and admins get Edit and Cancel controls. A comments section at the bottom lets participants coordinate logistics.
Passwordless Authentication
No passwords to remember. Users sign in with a 6-digit OTP sent to their email. Behind the scenes, JWTs handle sessions with automatic token refresh, and a Cloudflare KV-backed blacklist ensures clean logouts.
WhatsApp Groups Directory
The directory is one of the most-used features. It lists 55+ community WhatsApp groups — searchable and sorted by popularity (tracked via click analytics). Each group has a description and a one-tap “Join on WhatsApp” button that deep-links directly into the app. Admins can add and edit groups from the same interface.
Architecture
The project is a TypeScript monorepo with two main packages: a cross-platform frontend and a serverless backend.
Frontend — A single Expo codebase that compiles to iOS, Android, and web. File-based routing via Expo Router, styled with NativeWind (TailwindCSS for React Native) with full dark mode support. Server state is managed by TanStack Query for caching and optimistic updates. Forms use React Hook Form with Zod schemas shared between frontend validation and backend API contracts.
Backend — A Hono REST API running on Cloudflare Workers, with Cloudflare D1 (edge SQLite) as the database and Drizzle ORM for type-safe queries and migrations. Authentication uses JWTs with refresh token rotation, OTP codes stored in Cloudflare KV, and transactional emails via Resend. The entire backend is serverless — no servers to manage, globally distributed at the edge.
Role-based access control — Three roles (admin, moderator, user) govern who can create events, manage groups, and moderate content. Admins get a dedicated user management interface.