Frontend repository for One Project One Month (OPOM).
Built with React + TypeScript + Vite for public users and admin workflows (portfolio, ideas, user management, timeline, dashboard, and configuration).
- Public pages: home, portfolios, developers, ideas, about us, user profile.
- Auth flows: login, register, profile setup, forgot/reset password, OTP.
- OAuth integration: GitHub and Google.
- User workflows: create/edit portfolio, OPOM registration, personal profile management.
- Admin panel: dashboard, portfolio management, idea management, user management, timeline management, admin profile, configuration.
- Role-based route guard (
USER/ADMIN) with protected routing. - API integration with refresh-token retry handling via Axios interceptor.
- Zustand persisted auth/user store with encrypted local storage.
- React 19 + TypeScript
- Vite 7
- React Router 6
- TanStack Query
- Zustand
- Tailwind CSS v4 + Radix UI
- React Hook Form + Zod
- Axios
- Chart.js
src/
app/
features/ # Feature modules (auth, portfolio, admin, etc.)
routes/ # Route definitions and guards
api/ # Axios client
assets/ # Images, svg, icons
components/ # Shared UI/layout components
config/ # App/API config (env-driven)
constants/ # Shared constants and lazy-load exports
hooks/ # Shared hooks
lib/ # Utilities, secure storage helpers
store/ # Zustand stores
styles/ # Global and feature styles
types/ # Shared type definitionsCreate .env.local in project root:
VITE_APP_NAME=OPOM Portfolio
VITE_BASE_URL=http://localhost:5173
VITE_API_URL=https://api-opom.one-project-one-month.com/swagger-ui/index.html
VITE_GITHUB_CLIENT_ID=your_github_client_id
VITE_GITHUB_REDIRECT_URI=your_github_redirect_uri
VITE_GOOGLE_CLIENT_ID=your_google_client_id
VITE_GOOGLE_REDIRECT_URI=your_google_redirect_uri
VITE_STORAGE_SECRET=your_storage_secretpnpm install
npm run devApp runs at http://localhost:5173.
npm run dev- start Vite dev servernpm run build- type-check and build for production
- API base URL is controlled by
VITE_API_URL.
vercel.jsonis configured for SPA rewrites toindex.html.Dockerfileincludes a basic Node setup with dependency install and source copy.
This project is licensed under GNU GPL v3. See LICENSE.