Files
Pennyzo-Frontend/README.md

96 lines
3.0 KiB
Markdown

# Pennyzo Web
A modern React TypeScript web application for Pennyzo, built with Tailwind CSS and custom branding.
## Features
- React 18 with TypeScript for type safety
- Tailwind CSS with custom color palette
- Responsive design with mobile-first approach
- Sticky navigation header
- Custom brand colors: deep-navy, brass, off-white, light-gray
## Getting Started
1. Install dependencies:
```bash
npm install
```
2. Start the development server:
```bash
npm run dev
```
3. Open [http://localhost:3000](http://localhost:3000) to view it in the browser.
## Custom Colors
The project includes a custom Tailwind color palette:
- `deep-navy`: #0A192F
- `brass`: #D4AF37
- `off-white`: #F8F8F8
- `light-gray`: #CCD6F6
## Project Structure
```
src/
├── components/
│ ├── Header.tsx # Main navigation header
│ ├── HeroSection.tsx # Hero section with CTA
│ ├── FeaturesSection.tsx # Features grid with cards
│ ├── WhyPennyzoSection.tsx # Benefits section
│ └── Footer.tsx # Footer with links and contact info
├── App.tsx # Main application component
├── index.tsx # Application entry point
└── index.css # Tailwind CSS imports
```
## Available Scripts
- `npm run dev` - Runs the app in development mode with Vite
- `npm run build` - Builds the app for production
- `npm run preview` - Preview the production build locally
## Backend Integration Guide
Base URL: `https://api.pennyzo.com/api/v1/general` (configurable via `VITE_API_BASE_URL`)
- HTTP client: `src/lib/http.ts` (handles JSON, form, and auth header)
- Auth state: `src/context/AuthContext.tsx` (stores JWT token, loads `auth/me`)
- Endpoints: `src/lib/api/*`
- `system.ts`: `/system/health`, `/system/`
- `auth.ts`: `/auth/*` (verify email/resend/login/me/forgot/reset/change)
- `registration.ts`: `/registration/*` (register + rules + health)
- `users.ts`: `/users/*` (profile/company/gst/upgrade/stats/membership-info)
### UI flows → endpoints
- Registration modal `WaitlistForm`: `POST /registration/register`
- Maps UI fields to API and enforces rules:
- GST Registered → send `gst_number`, `cin_number=null`, `pan_number=null`
- Non-GST PRIVATE_LIMITED/LLP → send `cin_number`, `pan_number=null`
- Non-GST PARTNERSHIP/PROPRIETORSHIP/SOLE_INDIVIDUAL/OTHERS → send `pan_number`, `cin_number=null`
- Login modal `LoginPage`: `POST /auth/login` as `application/x-www-form-urlencoded` with `username`, `password`; then `GET /auth/me`.
- Forgot password button calls `POST /auth/forgot-password` with the entered email.
### Types and config
- Types: `src/types/api.ts`
- Config: set `VITE_API_BASE_URL` in `.env` (see `.env.example`).
### Quick health check
```
curl -X GET "https://api.pennyzo.com/api/v1/general/system/health"
```
### Error handling
- Non-2xx responses are surfaced with `error.message` when provided by backend.
- Invalid token on `auth/me` clears stored token.