A full-stack photo gallery application built with Ruby on Rails and React. Users can upload photos with metadata, view them in a grid layout, and manage their collections.
- Photo upload with metadata (title, description, location, date)
- Responsive photo grid display
- User authentication (email/password, Google, Apple)
- AWS S3 integration for photo storage
- AWS IAM integration for user-specific permissions
- Backend: Ruby on Rails 7
- Frontend: React with Tailwind CSS
- Database: PostgreSQL
- Storage: AWS S3
- Authentication: JWT + OAuth (Google, Apple)
- Ruby 3.2.0 or higher
- Node.js 16 or higher
- PostgreSQL
- AWS account with S3 and IAM access
-
Clone the repository:
git clone <repository-url> cd <repository-name>
-
Install backend dependencies:
bundle install
-
Install frontend dependencies:
cd client npm install cd ..
-
Create a
.env
file in the root directory with the following variables:AWS_ACCESS_KEY_ID=your_access_key AWS_SECRET_ACCESS_KEY=your_secret_key AWS_REGION=your_region AWS_BUCKET=your_bucket_name GOOGLE_CLIENT_ID=your_google_client_id GOOGLE_CLIENT_SECRET=your_google_client_secret APPLE_CLIENT_ID=your_apple_client_id APPLE_CLIENT_SECRET=your_apple_client_secret
-
Set up the database:
rails db:create db:migrate
-
Start the application:
./start.sh
The application will be available at:
- Frontend: http://localhost:3000
- Backend API: http://localhost:3000/api/v1
- Backend API endpoints are prefixed with
/api/v1
- Frontend development server runs on port 3000
- Backend server runs on port 3000
- The
start.sh
script manages both servers
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature
) - Commit your changes (
git commit -m 'Add some 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.