A modern, responsive single-page waitlist application for JechSpace. This project features localStorage-based submission tracking, smooth animations, and a clean user experience optimized for waitlist signups.
- Single-Page Application: Focused waitlist experience without unnecessary navigation
- Smart Tracking: localStorage-based submission tracking prevents duplicate signups
- Responsive Design: Optimized for all device sizes
- Smooth Animations: Framer Motion powered interactions
- Form Validation: Real-time validation with user-friendly error messages
- API Integration: Connected to JechSpace waitlist API
- Success States: Different messages for new vs returning users
- Social Integration: Links to social media platforms
- Frontend Framework: React 19
- Build Tool: Vite 6.3.5
- Styling: Tailwind CSS 4.1.10
- UI Components: shadcn/ui with Radix UI
- Animations: Framer Motion 12.18.1
- Icons: Lucide React 0.519.0
- HTTP Client: Axios 1.10.0
- Form Validation: Custom validation utilities
- Storage: Browser localStorage for submission tracking
JechSpace-waitlist-Frontend/
├── public/
│ ├── index.html
│ ├── favicon.png
│ └── logo-blue.png
├── src/
│ ├── components/
│ │ ├── ui/ # shadcn/ui components
│ │ │ ├── button.jsx
│ │ │ ├── card.jsx
│ │ │ └── input.jsx
│ │ ├── Navbar.jsx # Simplified navbar (logo + CTA)
│ │ ├── WaitlistFooter.jsx # Dedicated waitlist footer
│ │ └── WaitlistForm.jsx # Main waitlist form with localStorage
│ ├── pages/
│ │ └── WaitlistPage.jsx # Single page layout
│ ├── services/
│ │ └── api.js # API integration
│ ├── hooks/
│ │ └── useWaitlist.js # Waitlist submission hook
│ ├── utils/
│ │ ├── validation.js # Form validation
│ │ └── waitlistStorage.js # localStorage management
│ ├── App.jsx # Root component
│ ├── main.jsx
│ └── index.css
├── package.json
└── tailwind.config.js
- Node.js (v18 or higher)
- npm or yarn
-
Clone the repository:
git clone <repository-url> cd JechSpace-waitlist-frontend
-
Install dependencies:
npm install
-
Create environment file:
cp .env.example .env
-
Update the
.env
file with your backend API URL:VITE_API_URL=http://localhost:8000/api
-
Start the development server:
npm run dev
-
Open your browser and navigate to
http://localhost:5173
npm run dev
- Start development servernpm run build
- Build for productionnpm run preview
- Preview production build locallynpm run lint
- Run ESLint
The frontend is designed to work with a Django backend. Update the API endpoints in src/services/api.js
to match your backend URLs:
POST /api/waitlist/
- Submit waitlist formGET /api/waitlist/check/?email=<email>
- Check if email existsGET /api/waitlist/stats/
- Get waitlist statistics (optional)
{
"success": true,
"data": {
"id": 1,
"email": "[email protected]",
"first_name": "John",
"last_name": "Doe"
},
"message": "Successfully joined the waitlist!"
}
npm run build
The build artifacts will be stored in the dist/
directory.
- Fork the repository
- Create a feature branch:
git checkout -b feature-name
- Commit your changes:
git commit -am 'Add some feature'
- Push to the branch:
git push origin feature-name
- Submit a pull request
- Built with Vite
- UI components inspired by shadcn/ui
- Animations powered by Framer Motion
- Icons from Lucide