A comprehensive booking application for service providers and clients, built with React Native (TypeScript) and Go (Gin/GORM).
- Service Providers: Create profiles, manage availability, view bookings, and receive reviews
- Clients: Search for services, book appointments, manage bookings, and leave reviews
- Categories: Multiple service categories (tattoo, haircut, nails, salon, pet grooming, etc.)
- Location-based Search: Find services near your location
- Reviews: Both providers and clients can leave reviews
- Booking Management: Create, cancel, and reschedule bookings
- Availability Management: Providers can set their available time slots
- Go with Gin framework
- GORM for database ORM
- PostgreSQL database
- JWT authentication
- OAuth support (Google)
- React Native with TypeScript
- Expo for cross-platform development
- React Navigation for navigation
- Axios for API calls
- AsyncStorage for local storage
Pluralink/
├── backend/ # Go backend
│ ├── config/ # Configuration
│ ├── database/ # Database connection and migrations
│ ├── handlers/ # API handlers
│ ├── middleware/ # Auth and CORS middleware
│ ├── models/ # Database models
│ ├── routes/ # Route definitions
│ └── utils/ # Utility functions
├── frontend/ # React Native app
│ ├── components/ # Reusable components
│ ├── context/ # React context providers
│ ├── navigation/ # Navigation setup
│ ├── screens/ # Screen components
│ ├── services/ # API service layer
│ ├── types/ # TypeScript type definitions
│ └── utils/ # Utility functions
└── README.md
- Navigate to the backend directory:
cd backend- Install dependencies:
go mod download-
Set up PostgreSQL database and create a database named
pluralink -
Create a
.envfile in the backend directory (use.env.exampleas reference):
DB_HOST=localhost
DB_USER=postgres
DB_PASSWORD=postgres
DB_NAME=pluralink
DB_PORT=5432
SERVER_PORT=8080
JWT_SECRET=your-secret-key-change-in-production
OAUTH_CLIENT_ID=your-oauth-client-id
OAUTH_SECRET=your-oauth-secret
OAUTH_REDIRECT=http://localhost:8080/api/auth/callback- Run the server:
go run main.goThe server will start on http://localhost:8080
- Navigate to the frontend directory:
cd frontend- Install dependencies:
npm install-
Update the API base URL in
frontend/services/api.tsif needed -
Start the development server:
npm startFor specific platforms:
- iOS:
npm run ios - Android:
npm run android - Web:
npm run web
POST /api/auth/register- Register a new userPOST /api/auth/login- LoginGET /api/auth/oauth- OAuth loginGET /api/auth/callback- OAuth callback
GET /api/providers- List providers (with filters)GET /api/providers/:id- Get provider detailsPOST /api/providers- Create provider profile (protected)PUT /api/providers- Update provider profile (protected)
GET /api/bookings- List user's bookings (protected)GET /api/bookings/:id- Get booking details (protected)POST /api/bookings- Create booking (protected)PUT /api/bookings/:id/reschedule- Reschedule booking (protected)DELETE /api/bookings/:id- Cancel booking (protected)
GET /api/availabilities- Get my availabilities (provider, protected)POST /api/availabilities- Create availability (provider, protected)PUT /api/availabilities/:id- Update availability (provider, protected)DELETE /api/availabilities/:id- Delete availability (provider, protected)
POST /api/reviews- Create review (protected)GET /api/reviews/provider/:id- Get provider reviewsGET /api/reviews/client/:id- Get client reviews
GET /api/search/providers- Search providersGET /api/search/categories- Get all categories
- User: Base user model with authentication
- ServiceProvider: Provider profile with business details
- Client: Client profile
- Category: Service categories
- Service: Services offered by providers
- Availability: Time slots availability
- Booking: Appointment bookings
- Review: Reviews from both parties
- The backend uses GORM auto-migration to create database tables
- Categories are seeded automatically on server start
- JWT tokens are used for authentication
- CORS is enabled for all origins (configure for production)
- Location-based search uses simple distance calculation (consider PostGIS for production)
- Implement proper geospatial queries for location-based search
- Add email notifications for bookings
- Implement payment integration
- Add image uploads for provider profiles
- Implement push notifications
- Add calendar integration
- Enhance OAuth implementation with user info fetching
- Add unit and integration tests
MIT