Apply your knowledge to build something amazing!
By completing this team project, you will:
This professional team project (3-5 members) challenges you to build, deploy, and maintain a Developer Resource Platform - a full-stack application that serves as a centralized hub for technical resources, tools, and knowledge sharing within the developer community. This portfolio-worthy project will showcase your ability to work in a professional development team using industry-standard practices.
Frontend Stack:
Backend Stack:
Infrastructure:
User Management System
Resource Management
Community Features
API & Integrations
Analytics Dashboard
One. Tech Lead / Architect
2. Frontend Developer
3. Backend Developer
4. DevOps Engineer
5. QA/Documentation Lead (optional for 5-member teams)
Deliverables:
Repository Setup:
# Repository Structure
.
├── .github/
│ ├── workflows/
│ │ ├── ci.yml
│ │ ├── cd.yml
│ │ └── codeql.yml
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug_report.md
│ │ ├── feature_request.md
│ │ └── documentation.md
│ └── PULL_REQUEST_TEMPLATE.md
├── frontend/
│ ├── src/
│ ├── tests/
│ ├── public/
│ └── package.json
├── backend/
│ ├── src/
│ ├── tests/
│ ├── migrations/
│ └── package.json
├── infrastructure/
│ ├── docker/
│ ├── kubernetes/
│ └── terraform/
├── docs/
│ ├── api/
│ ├── architecture/
│ └── deployment/
├── scripts/
├── .env.example
├── docker-compose.yml
├── README.md
├── CONTRIBUTING.md
├── CODE_OF_CONDUCT.md
├── SECURITY.md
└── LICENSE
Git Workflow Implementation:
# .github/workflows/ci.yml
name: Continuous Integration
on:
pull_request:
branches: [main, develop]
push:
branches: [main, develop]
jobs:
frontend-tests:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: '18'
cache: 'npm'
- run: npm ci --prefix frontend
- run: npm run lint --prefix frontend
- run: npm run test:unit --prefix frontend
- run: npm run test:e2e --prefix frontend
- run: npm run build --prefix frontend
backend-tests:
runs-on: ubuntu-latest
services:
postgres:
image: postgres:15
env:
POSTGRES_PASSWORD: postgres
options: >-
--health-cmd pg_isready
--health-interval 10s
--health-timeout 5s
--health-retries 5
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
- run: npm ci --prefix backend
- run: npm run lint --prefix backend
- run: npm run test --prefix backend
- run: npm run test:integration --prefix backend
security-scan:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Run CodeQL Analysis
uses: github/codeql-action/analyze@v2
- name: Run Trivy vulnerability scanner
uses: aquasecurity/trivy-action@master
Branch Protection Rules:
{
"required_status_checks": {
"strict": true,
"contexts": ["frontend-tests", "backend-tests", "security-scan"]
},
"enforce_admins": false,
"required_pull_request_reviews": {
"required_approving_review_count": 2,
"dismiss_stale_reviews": true,
"require_code_owner_reviews": true
},
"restrictions": null
}
Comprehensive Testing Strategy:
Unit Testing (80% coverage minimum)
// Example: Frontend Component Test
describe('ResourceCard', () => {
test('displays resource information correctly', () => {
const resource = {
title: 'React Documentation',
category: 'Documentation',
rating: 4.5
};
const { getByText } = render(<ResourceCard resource={resource} />);
expect(getByText('React Documentation')).toBeInTheDocument();
});
});
Integration Testing
// Example: API Integration Test
describe('POST /api/resources', () => {
test('creates resource with valid data', async () => {
const response = await request(app)
.post('/api/resources')
.set('Authorization', `Bearer ${token}`)
.send(validResourceData);
expect(response.status).toBe(201);
expect(response.body).toHaveProperty('id');
});
});
End-to-End Testing
// Example: E2E Test with Cypress
describe('Resource Submission Flow', () => {
it('allows authenticated user to submit resource', () => {
cy.login();
cy.visit('/resources/new');
cy.fillResourceForm(testResource);
cy.get('[data-cy=submit]').click();
cy.url().should('include', '/resources/');
cy.contains(testResource.title);
});
});
Docker Configuration:
# frontend/Dockerfile
FROM node:18-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY . .
RUN npm run build
FROM nginx:alpine
COPY --from=builder /app/build /usr/share/nginx/html
COPY nginx.conf /etc/nginx/nginx.conf
EXPOSE 80
Kubernetes Deployment:
# infrastructure/kubernetes/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: resource-platform
spec:
replicas: 3
selector:
matchLabels:
app: resource-platform
template:
metadata:
labels:
app: resource-platform
spec:
containers:
- name: frontend
image: ghcr.io/yourteam/frontend:latest
ports:
- containerPort: 80
resources:
requests:
memory: "128Mi"
cpu: "100m"
limits:
memory: "256Mi"
cpu: "200m"
- name: backend
image: ghcr.io/yourteam/backend:latest
ports:
- containerPort: 3000
env:
- name: DATABASE_URL
valueFrom:
secretKeyRef:
name: db-credentials
key: url
Performance Monitoring Setup:
// backend/src/monitoring/performance.js
const prometheus = require('prom-client');
// Create metrics
const httpRequestDuration = new prometheus.Histogram({
name: 'http_request_duration_seconds',
help: 'Duration of HTTP requests in seconds',
labelNames: ['method', 'route', 'status_code']
});
const activeUsers = new prometheus.Gauge({
name: 'active_users_total',
help: 'Total number of active users'
});
// Middleware
app.use((req, res, next) => {
const end = httpRequestDuration.startTimer();
res.on('finish', () => {
end({ method: req.method, route: req.route?.path, status_code: res.statusCode });
});
next();
});
Conventional Commits Specification:
<type>(<scope>): <subject>
<body>
<footer>
Types:
feat
: New featurefix
: Bug fixdocs
: Documentation changesstyle
: Code style changes (formatting, semicolons, etc)refactor
: Code refactoringperf
: Performance improvementstest
: Adding or updating testsbuild
: Build system changesci
: CI configuration changeschore
: Other changes that don't modify src or test filesExample Commits:
feat(auth): implement OAuth2 integration with GitHub
- Add OAuth2 flow for GitHub authentication
- Create user sessions with JWT tokens
- Add refresh token mechanism
- Update user model to store GitHub profile
Closes #23
---
fix(api): handle rate limiting for external API calls
Implement exponential backoff strategy when hitting rate limits.
Previous implementation would fail immediately.
BREAKING CHANGE: API client now requires retry configuration
Pull Request Template:
## Description
Brief description of changes and why they were made.
## Type of Change
- [ ] Bug fix (non-breaking change which fixes an issue)
- [ ] New feature (non-breaking change which adds functionality)
- [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)
- [ ] Documentation update
## Testing
- [ ] Unit tests pass locally
- [ ] Integration tests pass
- [ ] Manual testing completed
- [ ] Performance impact assessed
## Checklist
- [ ] Code follows project style guidelines
- [ ] Self-review completed
- [ ] Comments added for complex logic
- [ ] Documentation updated
- [ ] No new warnings generated
- [ ] Tests added/updated
- [ ] All tests passing
## Screenshots (if applicable)
Code Review Checklist:
Architecture & Design
Code Quality
Testing
Performance
Security
One. Continuous Integration Pipeline:
# .github/workflows/ci.yml
name: CI Pipeline
on:
pull_request:
types: [opened, synchronize, reopened]
push:
branches: [main, develop]
env:
NODE_VERSION: '18'
DOCKER_REGISTRY: ghcr.io
jobs:
code-quality:
name: Code Quality Checks
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Setup Node.js
uses: actions/setup-node@v3
with:
node-version: ${{ env.NODE_VERSION }}
cache: 'npm'
- name: Install dependencies
run: |
npm ci --prefix frontend
npm ci --prefix backend
- name: Run ESLint
run: |
npm run lint --prefix frontend
npm run lint --prefix backend
- name: Run Prettier
run: |
npm run format:check --prefix frontend
npm run format:check --prefix backend
- name: TypeScript Check
run: |
npm run type-check --prefix frontend
npm run type-check --prefix backend
test-coverage:
name: Test Coverage
runs-on: ubuntu-latest
services:
postgres:
image: postgres:15
env:
POSTGRES_PASSWORD: postgres
POSTGRES_DB: testdb
options: >-
--health-cmd pg_isready
--health-interval 10s
--health-timeout 5s
--health-retries 5
ports:
- 5432:5432
redis:
image: redis:7
options: >-
--health-cmd "redis-cli ping"
--health-interval 10s
--health-timeout 5s
--health-retries 5
ports:
- 6379:6379
steps:
- uses: actions/checkout@v3
- name: Setup Node.js
uses: actions/setup-node@v3
with:
node-version: ${{ env.NODE_VERSION }}
- name: Install dependencies
run: |
npm ci --prefix frontend
npm ci --prefix backend
- name: Run tests with coverage
env:
DATABASE_URL: postgresql://postgres:postgres@localhost:5432/testdb
REDIS_URL: redis://localhost:6379
run: |
npm run test:coverage --prefix frontend
npm run test:coverage --prefix backend
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v3
with:
files: ./frontend/coverage/lcov.info,./backend/coverage/lcov.info
fail_ci_if_error: true
security-scan:
name: Security Scanning
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Run Trivy vulnerability scanner
uses: aquasecurity/trivy-action@master
with:
scan-type: 'fs'
scan-ref: '.'
format: 'sarif'
output: 'trivy-results.sarif'
- name: Upload Trivy scan results
uses: github/codeql-action/upload-sarif@v2
with:
sarif_file: 'trivy-results.sarif'
- name: Run Snyk security scan
uses: snyk/actions/node@master
env:
SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }}
with:
args: --severity-threshold=high
build-images:
name: Build Docker Images
needs: [code-quality, test-coverage, security-scan]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
- name: Log in to GitHub Container Registry
uses: docker/login-action@v2
with:
registry: ${{ env.DOCKER_REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Build and push frontend image
uses: docker/build-push-action@v4
with:
context: ./frontend
push: true
tags: |
${{ env.DOCKER_REGISTRY }}/${{ github.repository }}/frontend:${{ github.sha }}
${{ env.DOCKER_REGISTRY }}/${{ github.repository }}/frontend:latest
cache-from: type=gha
cache-to: type=gha,mode=max
- name: Build and push backend image
uses: docker/build-push-action@v4
with:
context: ./backend
push: true
tags: |
${{ env.DOCKER_REGISTRY }}/${{ github.repository }}/backend:${{ github.sha }}
${{ env.DOCKER_REGISTRY }}/${{ github.repository }}/backend:latest
cache-from: type=gha
cache-to: type=gha,mode=max
2. Continuous Deployment Pipeline:
# .github/workflows/cd.yml
name: CD Pipeline
on:
push:
branches: [main]
workflow_dispatch:
jobs:
deploy-staging:
name: Deploy to Staging
runs-on: ubuntu-latest
environment: staging
steps:
- uses: actions/checkout@v3
- name: Deploy to Kubernetes
uses: azure/k8s-deploy@v4
with:
manifests: |
infrastructure/kubernetes/staging/
images: |
ghcr.io/${{ github.repository }}/frontend:${{ github.sha }}
ghcr.io/${{ github.repository }}/backend:${{ github.sha }}
- name: Run smoke tests
run: |
npm run test:smoke --prefix tests
- name: Notify deployment status
uses: 8398a7/action-slack@v3
with:
status: ${{ job.status }}
text: 'Staging deployment ${{ job.status }}'
env:
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK }}
deploy-production:
name: Deploy to Production
needs: deploy-staging
runs-on: ubuntu-latest
environment: production
steps:
- uses: actions/checkout@v3
- name: Create release
uses: actions/create-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: v${{ github.run_number }}
release_name: Release v${{ github.run_number }}
draft: false
prerelease: false
- name: Deploy to production
run: |
# Production deployment script
./scripts/deploy-production.sh
# Developer Resource Platform
[](https://github.com/yourteam/resource-platform/actions)
[](https://codecov.io/gh/yourteam/resource-platform)
[](LICENSE)
[](https://github.com/yourteam/resource-platform/packages)
A collaborative platform for developers to share and discover technical resources, built with modern web technologies and following industry best practices.
## 🚀 Features
- **OAuth Authentication**: Secure login with GitHub and Google
- **Resource Management**: Full CRUD operations with validation
- **Advanced Search**: Elasticsearch-powered search with filters
- **Real-time Updates**: WebSocket-based notifications
- **API Access**: RESTful API with OpenAPI documentation
- **Analytics Dashboard**: Track resource popularity and engagement
## 🛠️ Tech Stack
### Frontend
- React 18 with TypeScript
- Redux Toolkit for state management
- Material-UI for components
- React Query for data fetching
- Vite for building
### Backend
- Node.js with Express
- PostgreSQL database
- Redis for caching
- JWT authentication
- Prisma ORM
### Infrastructure
- Docker containers
- Kubernetes orchestration
- GitHub Actions CI/CD
- Prometheus monitoring
- Grafana dashboards
## 📋 Prerequisites
- Node.js 18+
- Docker Desktop
- PostgreSQL 15+
- Redis 7+
## 🔧 Installation
1. Clone the repository:
\`\`\`bash
git clone https://github.com/yourteam/resource-platform.git
cd resource-platform
\`\`\`
2. Install dependencies:
\`\`\`bash
npm run install:all
\`\`\`
3. Set up environment variables:
\`\`\`bash
cp .env.example .env
# Edit .env with your configuration
\`\`\`
4. Start development servers:
\`\`\`bash
npm run dev
\`\`\`
## 🐳 Docker Setup
\`\`\`bash
docker-compose up -d
\`\`\`
## 🧪 Testing
\`\`\`bash
# Run all tests
npm test
# Run with coverage
npm run test:coverage
# Run E2E tests
npm run test:e2e
\`\`\`
## 📚 API Documentation
API documentation is available at `/api/docs` when running the application.
## 🤝 Contributing
Please read our [Contributing Guide](CONTRIBUTING.md) for details on our code of conduct and the process for submitting pull requests.
## 📄 License
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
## 👥 Team
- **Tech Lead**: @username1
- **Frontend Dev**: @username2
- **Backend Dev**: @username3
- **DevOps**: @username4
## 🙏 Acknowledgments
- Thanks to all contributors
- Built during GitHub Workshop Course
# docs/api/openapi.yaml
openapi: 3.0.0
info:
title: Developer Resource Platform API
version: 1.0.0
description: RESTful API for managing developer resources
contact:
email: api@yourteam.com
license:
name: MIT
url: https://opensource.org/licenses/MIT
servers:
- url: https://api.yourplatform.com/v1
description: Production server
- url: http://localhost:3000/api/v1
description: Development server
paths:
/resources:
get:
summary: List all resources
operationId: listResources
tags:
- Resources
parameters:
- name: page
in: query
schema:
type: integer
default: 1
- name: limit
in: query
schema:
type: integer
default: 20
- name: category
in: query
schema:
type: string
responses:
'200':
description: Successful response
content:
application/json:
schema:
$ref: '#/components/schemas/ResourceList'
Pre-deployment
Deployment Process
Post-deployment
// monitoring/alerts.js
const alerts = {
highErrorRate: {
condition: 'rate(http_requests_total{status=~"5.."}[5m]) > 0.05',
severity: 'critical',
action: 'page-oncall'
},
highLatency: {
condition: 'histogram_quantile(0.95, http_request_duration_seconds) > 2',
severity: 'warning',
action: 'slack-notification'
},
lowDiskSpace: {
condition: 'node_filesystem_avail_bytes / node_filesystem_size_bytes < 0.1',
severity: 'critical',
action: 'page-oncall'
}
};
One. Technical Architecture Presentation
## System Architecture
### High-Level Overview
[Include architecture diagram showing:]
- Frontend components and routing
- API gateway and microservices
- Database and caching layers
- External service integrations
- CI/CD pipeline flow
### Technology Decisions
- **Frontend**: React chosen for component reusability and ecosystem
- **Backend**: Node.js for JavaScript consistency across stack
- **Database**: PostgreSQL for ACID compliance and complex queries
- **Cache**: Redis for session management and API response caching
- **Container**: Docker for consistent deployment environments
2. Code Quality Metrics Dashboard
# Display in your presentation:
Code Coverage: 87%
Technical Debt Ratio: 3.2%
Maintainability Index: A
Security Rating: A
Performance Score: 95/100
Accessibility Score: 100/100
3. Live Demo Script
Authentication Flow (2 min)
Core Features (5 min)
Performance (2 min)
Team Collaboration (3 min)
Architecture Design (10%)
Code Quality (15%)
Feature Implementation (15%)
Git Workflow (10%)
CI/CD Implementation (10%)
Documentation (10%)
Communication (10%)
Project Management (10%)
Day 1-2: Solid foundation
Day 3-5: Rapid development
Day 6-7: Integration & polish
Day 8-10: Production readiness
Day 11-12: Final polish
Day 13-14: Presentation prep
Source Code
Documentation
Project Artifacts
Create a GitHub issue with:
## Team: [Team Name]
### Team Members
- @github-username1 (Role: Tech Lead)
- @github-username2 (Role: Frontend Dev)
- @github-username3 (Role: Backend Dev)
- @github-username4 (Role: DevOps)
### Project Links
- **Repository**: [URL]
- **Live Demo**: [URL]
- **API Docs**: [URL]
- **Demo Video**: [URL]
- **Presentation**: [URL]
### Metrics
- Test Coverage: XX%
- Lighthouse Score: XX/100
- Build Time: XX seconds
- Bundle Size: XX KB
### Key Achievements
1. [Achievement 1]
2. [Achievement 2]
3. [Achievement 3]
### Technologies Used
- Frontend: [List]
- Backend: [List]
- Infrastructure: [List]
### Special Considerations
[Any additional notes]
This project serves as a cornerstone for your professional portfolio. Use it to:
Remember: This isn't just a course project-it's your opportunity to build something meaningful that demonstrates your readiness for professional software development.
Good luck, and build something amazing! :tada: