A modern, full-stack portfolio application built with Ruby on Rails (API) and React (Frontend) with TailwindCSS and Shadcn/UI.
This is a professional portfolio application showcasing projects, skills, work experience, and providing a contact form for potential clients and employers. The application is built with modern web technologies and follows best practices for scalability, security, and performance.
- Backend: Ruby on Rails 7.1+ (API mode)
- Frontend: React 18+ + Vite + TypeScript (Coming in Phase 2)
- Styling: TailwindCSS + Shadcn/UI (Coming in Phase 2)
- Database: PostgreSQL
- Authentication: JWT + Devise (Future implementation)
- File Storage: Active Storage + AWS S3 (Production)
- Email: ActionMailer with professional templates
- Testing: RSpec with comprehensive test suite
- Deployment: Railway/Heroku (Backend) + Vercel (Frontend)
- โ Rails 7.1+ API with PostgreSQL
- โ Essential gems (rack-cors, devise, jwt, image_processing)
- โ Development and test environment configuration
- โ RSpec testing framework setup
- โ Database connection and configuration
- โ Project Model: Portfolio projects with validations, scopes, Active Storage
- โ Skill Model: Technical skills with proficiency levels and categories
- โ Experience Model: Work history with duration calculations and validations
- โ ContactMessage Model: Contact form inquiries with priority system
- โ Active Storage: File upload capabilities for project images
- โ Database Indexes: Performance optimized with proper indexing
- โ
Projects API:
GET /api/v1/projects- List with filtering, search, paginationGET /api/v1/projects/:id- Detailed project view
- โ
Skills API:
GET /api/v1/skills- List with category grouping and filtering
- โ
Experiences API:
GET /api/v1/experiences- Work history with filtering and sorting
- โ
Contact Messages API:
POST /api/v1/contact_messages- Submit contact form
- โ
Health Check:
GET /up- Application health monitoring
- โ ActionMailer Configuration: Professional email templates
- โ Contact Form Mailer: Admin notifications + auto-reply confirmations
- โ Beautiful Email Templates: HTML and text versions
- โ Background Job Processing: Async email delivery with ActiveJob
- โ SMTP Configuration: Development and production ready
- โ CORS Configuration: Frontend integration ready
- โ Error Handling: Comprehensive error responses with proper HTTP status codes
- โ Validation: Input validation on all models with detailed error messages
- โ Security: Parameter filtering, CORS headers, secure configurations
- โ Environment Variables: Secure configuration management
project-portfolio/
โโโ backend/ # Rails API (Phase 1 โ
)
โ โโโ app/
โ โ โโโ controllers/ # API controllers with error handling
โ โ โโโ models/ # Data models with validations
โ โ โโโ mailers/ # Email notification system
โ โ โโโ serializers/ # JSON response formatting
โ โ โโโ views/ # Email templates
โ โโโ config/ # Rails configuration
โ โโโ db/ # Database migrations and seeds
โ โโโ spec/ # RSpec test suite
โโโ frontend/ # React SPA (Phase 2 - Coming Soon)
โโโ PORTFOLIO_ROADMAP.md # Development roadmap
- Development:
http://localhost:3000/api/v1 - Production:
https://your-api-domain.com/api/v1
GET /api/v1/projectsQuery Parameters:
page- Page number for paginationper_page- Items per page (max 50)status- Filter by status (completed, in_progress, planned)featured- Filter featured projects (true/false)search- Search in title and descriptionsort_by- Sort by (title, created_at, priority, view_count)
GET /api/v1/projects/:idReturns detailed project information including challenges, learnings, and image galleries.
GET /api/v1/skillsQuery Parameters:
category- Filter by category (frontend, backend, database, etc.)featured- Filter featured skills (true/false)grouped- Group by category (true/false)min_proficiency- Filter by minimum proficiency level (1-10)
GET /api/v1/experiencesQuery Parameters:
employment_type- Filter by type (full_time, part_time, contract, etc.)current- Filter current positions (true/false)featured- Filter featured experiences (true/false)technology- Filter by technology used
POST /api/v1/contact_messagesRequest Body:
{
"contact_message": {
"name": "John Doe",
"email": "[email protected]",
"subject": "Project Inquiry",
"message": "I'm interested in collaborating...",
"message_type": "collaboration"
}
}- Ruby 3.1+
- Rails 7.1+
- PostgreSQL 12+
- Node.js 18+ (for frontend - Phase 2)
-
Clone the repository
git clone https://github.com/akingundogdu/rails-project-portfolio-app.git cd rails-project-portfolio-app -
Install dependencies
cd backend bundle install -
Database setup
rails db:create rails db:migrate rails db:seed
-
Start the server
rails server
-
API will be available at
http://localhost:3000
Create a .env file in the backend directory with:
# Database Configuration
DATABASE_HOST=localhost
DATABASE_USERNAME=postgres
DATABASE_PASSWORD=your_password
# Email Configuration
ADMIN_EMAIL=[email protected]
MAILER_FROM_EMAIL=[email protected]
SMTP_ADDRESS=smtp.gmail.com
SMTP_PORT=587
SMTP_USERNAME=[email protected]
SMTP_PASSWORD=your-app-password
# Frontend URL (for CORS and email links)
FRONTEND_URL=http://localhost:3000Run the comprehensive test suite:
cd backend
bundle exec rspecThe application comes with rich sample data including:
- 20+ Skills across 9 categories (Frontend, Backend, Database, DevOps, Design, etc.)
- 3 Work Experiences with detailed job descriptions and achievements
- 5 Portfolio Projects with different statuses and comprehensive details
- 3 Sample Contact Messages with different priorities and types
- Rails API setup and configuration
- Database models and migrations
- API endpoints with filtering and pagination
- Email notification system
- Comprehensive testing setup
- React + TypeScript + Vite setup
- TailwindCSS + Shadcn/UI integration
- API integration and state management
- Responsive component architecture
- Layout components and navigation
- Theme system (dark/light mode)
- Reusable UI components
- Home page with hero section
- Projects gallery with filtering
- About page with skills and experience
- Contact page with form validation
- Animations and interactions
- Search and filtering
- Progressive Web App features
- CORS Configuration: Secure cross-origin resource sharing
- Input Validation: Comprehensive model and API validation
- Parameter Filtering: Strong parameter filtering in controllers
- Error Handling: Secure error responses without sensitive data leakage
- Environment Variables: Secure configuration management
- Database Indexing: Optimized database queries
- Pagination: Efficient data loading with pagination
- Background Jobs: Async email processing
- Image Optimization: Active Storage with variant processing
- Caching: Rails caching configuration
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
Akin Gundogdu
- Email: [email protected]
- GitHub: @akingundogdu
- Portfolio: [Coming Soon!]
โญ Star this repository if you find it helpful!
Built with โค๏ธ using Ruby on Rails and React