A personal developer portfolio and React Native preparation portal.
This repository contains a Single Page Application (SPA) that serves two primary purposes:
- A developer portfolio detailing professional experience, projects, and skills.
- A password-protected preparation portal containing study resources and coding examples for React Native interviews.
The application is built to be fast, responsive, and easily maintainable, utilizing static hosting combined with Firebase for dynamic data storage.
- Portfolio Interface — Displays employment history, technical skills, and educational background.
- Preparation Portal — Renders markdown-based study materials, coding examples, and theory notes.
- Client-Side Authentication — Restricts access to the preparation portal using a SHA-256 hash validation mechanism.
- Dark Mode Support — Toggles between light and dark themes using CSS variables and local storage.
The application follows a standard SPA architecture:
- Routing:
react-router-domhandles client-side transitions. - State Management:
react-querymanages asynchronous data fetching and caching from Firebase. - UI Components:
shadcn/uiprovides accessible, unstyled components that are customized via Tailwind CSS. - Data Persistence: Firebase Firestore stores dynamic content, with security rules defining read/write access.
| Category | Technology |
|---|---|
| Language | TypeScript |
| Framework | React 18, Vite |
| State/Data | TanStack React Query, Firebase |
| Styling | Tailwind CSS, shadcn/ui, Radix UI |
| Testing | Vitest, Testing Library |
| Infrastructure | GitHub Pages |
├── .github/workflows/ # CI/CD pipelines for deployment
├── public/ # Static assets and preparation portal HTML
├── src/
│ ├── components/ # Reusable UI components
│ ├── pages/ # Top-level route components
│ ├── App.tsx # Application routing entry point
│ └── main.tsx # React DOM mounting
├── firebase.json # Firebase hosting and rules configuration
├── package.json # Dependency definitions and scripts
└── vite.config.ts # Bundler configuration
- Node.js (v18 or higher)
- npm or Bun
-
Clone the repository
git clone https://github.com/Rajeev02/Rajeev02.github.io.git cd Rajeev02.github.io -
Install dependencies
npm install
-
Configure environment variables Create a
.envfile in the project root containing your Firebase configuration:VITE_FIREBASE_API_KEY="your-api-key" VITE_FIREBASE_AUTH_DOMAIN="your-auth-domain" VITE_FIREBASE_PROJECT_ID="your-project-id" VITE_FIREBASE_STORAGE_BUCKET="your-storage-bucket" VITE_FIREBASE_MESSAGING_SENDER_ID="your-sender-id" VITE_FIREBASE_APP_ID="your-app-id"
Start the local Vite development server:
npm run devThe application will be accessible at http://localhost:5173.
The project uses Vitest for unit testing.
Run the test suite:
npm run testRun tests in watch mode during development:
npm run test:watchThe application is continuously deployed to GitHub Pages. The CI/CD pipeline (.github/workflows) executes the following steps on pushes to the master branch:
- Installs dependencies.
- Runs ESLint checks.
- Executes the Vitest test suite.
- Builds the production bundle (
npm run build). - Validates the build output (
npm run verify-build). - Publishes the
distdirectory to GitHub Pages.
- Preparation Portal Access: The
/preprationendpoint requires a password. Validation occurs client-side by comparing the input against a pre-computed SHA-256 hash. To change the password, generate a new hash (echo -n "password" | shasum -a 256) and update theACCESS_HASHconstant inpublic/prepration/index.html. - Database Rules: Firestore access is governed by
firestore.rules, ensuring only authorized reads/writes occur in the production environment.
- Fork the repository.
- Create a feature branch (
git checkout -b feature/your-feature). - Commit your changes (
git commit -am 'Add new feature'). - Ensure tests and linting pass (
npm run test && npm run lint). - Push to the branch (
git push origin feature/your-feature). - Create a Pull Request.