The official website for Tech Sisters Kenya, built with Next.js. This platform showcases our mission, programs, and provides resources for women in tech across Kenya.
- Quick Start
- Project Overview
- Project Structure
- Development
- Testing
- Contributing
- Deployment
- Resources
- License
- Node.js >= 18
- pnpm (recommended) or npm/yarn
- Docker (optional, for containerized development)
-
Clone the repository
git clone https://github.com/Tech-Sisters-Kenya/tsk-website-frontend.git cd tsk-website-frontend -
Install dependencies
pnpm install
-
Start development server
pnpm dev
-
Open your browser Navigate to http://localhost:3000
# Build the Docker image
docker build -t tsk-website-frontend .
# Run the container
docker run -p 3000:3000 tsk-website-frontendTech Sisters Kenya is a community-driven platform empowering women in technology across Kenya. Our website serves as a hub for resources, programs, and networking opportunities.
- Modern, Responsive Design - Optimized for all devices
- Performance Optimized - Fast loading with Next.js optimizations
- Type Safety - Built with TypeScript for better developer experience
- Comprehensive Testing - Unit and E2E tests with Jest and Playwright
- CI/CD Pipeline - Automated testing and deployment
- Accessibility - WCAG 2.1 compliant components
| Category | Technology |
|---|---|
| Framework | Next.js 15 with React 19 |
| Language | TypeScript |
| Styling | Tailwind CSS |
| State Management | Zustand (global), React Query (server) |
| Forms | React Hook Form |
| Animation | Framer Motion |
| Testing | Jest + React Testing Library, Playwright |
| Build Tool | Next.js (Vite-powered) |
.
# Core Application
├── src/
│ ├── app/ # App router pages and API routes
│ │ ├── about-us/ # About Us page and components
│ │ ├── blogs/ # Blog listing and detail pages
│ │ ├── get-involved/ # Get involved section
│ │ ├── landing-page/ # Homepage components
│ │ ├── meet-the-team/ # Team member pages
│ │ └── (auth)/ # Authentication pages (login, signup, password reset)
│ │
│ ├── assets/ # Static assets (images, icons, fonts)
│ ├── components/ # Reusable UI components
│ ├── data/ # Static data and content
│ ├── hooks/ # Custom React hooks
│ ├── lib/ # Utility functions and configurations
│ ├── stores/ # State management (Zustand stores)
│ ├── types/ # TypeScript type definitions
│ └── utils/ # Helper utilities
│
# Testing
├── tests/
│ ├── unit/ # Unit tests
│ │ ├── about-us-page/ # Tests for about us page
│ │ └── components/ # Component tests
│ └── e2e/ # End-to-end tests
│ ├── about-us.spec.ts
│ ├── demo-todo-app.spec.ts
│ └── example.spec.ts
│
# Configuration
├── public/ # Publicly accessible files
├── .eslintrc.js # ESLint configuration
├── .prettierrc # Prettier configuration
├── jest.config.js # Jest test configuration
├── next.config.js # Next.js configuration
└── tailwind.config.js # Tailwind CSS configuration
# Development
pnpm dev # Start development server
pnpm build # Build for production
pnpm start # Start production server
pnpm lint # Run ESLint
pnpm format # Format code with Prettier
# Testing
pnpm test:unit # Run unit tests
pnpm test:e2e # Run E2E testsOur codebase follows these principles:
- Feature-based Structure - Code organized by feature/module
- Component Library - Reusable components in
src/components - Custom Hooks - Shared logic in
src/hooks - Type Safety - Centralized types in
src/types - Utility Functions - Helpers in
src/utilsandsrc/lib
- Use TypeScript for all new code
- Follow the existing code style (Prettier + ESLint)
- Write tests for new features
- Ensure accessibility compliance
- Optimize for performance
# Unit tests
pnpm test:unit
pnpm test:unit:watch # Watch mode
pnpm test:unit:coverage # Coverage report
# E2E tests
pnpm test:e2e
pnpm test:e2e:ui # Interactive UI mode
pnpm test:e2e:report # View HTML report
# Specific test file
pnpm exec playwright test tests/e2e/specific-test.spec.ts- Unit Tests - Test individual components and utilities
- Integration Tests - Test component interactions
- E2E Tests - Test critical user flows
- Visual Regression - Ensure UI consistency
- Place tests next to components with
.test.tsxextension - Follow "Arrange-Act-Assert" pattern
- Use descriptive test names
- Test one behavior per test case
- Use Page Object Model pattern
- Keep tests independent and isolated
- Focus on critical user flows
- Use
test.onlyfor debugging
We welcome contributions! Here's how to get started:
- Fork the repository
- Create a feature branch
git checkout -b feature/amazing-feature
- Make your changes
- Commit with descriptive messages
git commit -m 'Feature: Add amazing feature' - Push to your fork
git push origin feature/amazing-feature
- Open a Pull Request
| Branch Type | Prefix | Target | Description |
|---|---|---|---|
| Feature | feature/ |
development |
New features |
| Bug Fix | fix/ |
development |
Bug fixes |
| Hotfix | hotfix/ |
main & development |
Critical fixes |
⚠️ Important: Never push directly tomain
Before submitting a PR, ensure:
- ✅ Code is properly formatted
- ✅ All tests pass
- ✅ PR title and description are clear
- ✅ Documentation is updated if needed
- ✅ UI matches the Figma design
- ✅ Screenshots or recordings included for UI changes
- Follow existing code patterns
- Use meaningful variable and function names
- Add comments for complex logic
- Ensure TypeScript types are properly defined
# Build the application
pnpm build
# Start production server locally
pnpm startCreate a .env.local file for local development:
# Add your environment variables here
NEXT_PUBLIC_API_URL=your_api_urlFigma Design: TSK Website UI
- Next.js Documentation
- React Documentation
- TypeScript Documentation
- Tailwind CSS Documentation
- Playwright Documentation
- Discussions: Use GitHub Discussions for questions
- Issues: Report bugs using GitHub Issues
- Contact: Reach out to the Tech Sisters Kenya team
This project is licensed under the MIT License.