A thoughtful gifting platform that helps friends and family share wishlists for any occasion - birthdays, holidays, weddings, baby showers, and more. Built with Rails 8.0 and designed with a beautiful rose-pink theme.
- User Authentication: Email/password registration with Google OAuth support
- Friend & Family Connections: Send invitations and manage connections
- Wishlist Management: Create multiple wishlists with different visibility settings
- Gift Items: Add items with URLs, descriptions, prices, and priorities
- Purchase Tracking: Mark items as purchased (hidden from wishlist owner)
- Public Profiles: Share public wishlists with anyone via profile links
- Real-time Notifications: In-app bell notifications with ActionCable
- Email Notifications: Beautiful, localized email templates with digest options
- Push Notifications: Mobile-ready FCM integration for iOS, Android, and Web
- Notification Preferences: Granular control over all notification types and delivery methods
- Internationalization: Complete bilingual support (English & Portuguese)
- Rose Pink Theme: Modern, warm color palette suitable for all occasions
- Responsive Design: Mobile-first approach with Tailwind CSS
- Card-Based UI: Clean, intuitive interface with smooth transitions
- Empty States: Helpful guidance when content is missing
- Accessibility: WCAG-compliant color contrast and keyboard navigation
- Ruby: 3.2.0+
- Rails: 8.0+
- Database: PostgreSQL
- CSS Framework: Tailwind CSS
- JavaScript: Stimulus & Turbo (Hotwire)
- Authentication: Devise with OmniAuth
- Email: ActionMailer
- Background Jobs: ActiveJob (async adapter in development)
- Real-time: ActionCable for live notifications
- Push Notifications: Firebase Cloud Messaging (FCM)
- Internationalization: Rails I18n with English and Portuguese support
- Ruby 3.2.0 or higher
- PostgreSQL 14+
- Node.js 18+ and Yarn
- Git
- Clone the repository:
git clone <repository-url>
cd wishare/wishare- Install dependencies:
bundle install
yarn install- Set up environment variables:
cp .env.example .envEdit .env and add your credentials:
GOOGLE_CLIENT_ID=your_google_client_id
GOOGLE_CLIENT_SECRET=your_google_client_secret
- Set up the database:
rails db:create
rails db:migrate
rails db:seed # Optional: loads sample data- Start the server:
rails serverVisit http://localhost:3000 to see the application.
# Run all tests
rails test
# Run specific test file
rails test test/models/user_test.rb
# Run system tests
rails test:system# Run RuboCop for Ruby code
bundle exec rubocop
# Run Prettier for JavaScript/CSS
yarn prettier --check .# Create a new migration
rails generate migration AddFieldToModel field:type
# Run migrations
rails db:migrate
# Rollback last migration
rails db:rollback
# Reset database (drop, create, migrate, seed)
rails db:reset- Use
binding.pryordebuggerin Ruby code - Rails console:
rails consoleorrails c - Database console:
rails dbconsoleorrails db - View logs:
tail -f log/development.log
wishare/
├── app/
│ ├── controllers/ # Request handling
│ ├── models/ # Business logic and data
│ ├── views/ # HTML templates
│ ├── mailers/ # Email templates
│ ├── javascript/ # Stimulus controllers
│ └── assets/ # CSS and images
├── config/
│ ├── routes.rb # URL routing
│ ├── database.yml # Database configuration
│ └── application.rb # App configuration
├── db/
│ ├── migrate/ # Database migrations
│ └── schema.rb # Database schema
├── test/ # Test files
├── public/ # Static files
└── Gemfile # Ruby dependencies
- Authentication and profile management
- Connections with other users
- Multiple wishlists
- Bidirectional friendship between users
- Status tracking (pending, accepted, declined)
- Belongs to a user
- Visibility settings (private, friends & family, public)
- Contains multiple items
- Belongs to a wishlist
- URL metadata extraction
- Purchase tracking
- Priority levels
- Email-based invitation system
- Token-based acceptance flow
- Automatic connection creation
The application is being prepared to serve as an API backend for a React Native mobile app.
- Session-based for web (Devise)
- Token-based for API (planned)
GET /api/v1/wishlists
POST /api/v1/wishlists
GET /api/v1/wishlists/:id
PUT /api/v1/wishlists/:id
DELETE /api/v1/wishlists/:id
GET /api/v1/connections
POST /api/v1/invitations
GET /api/v1/users/:id
Required environment variables:
| Variable | Description | Example |
|---|---|---|
GOOGLE_CLIENT_ID |
Google OAuth client ID | xxx.apps.googleusercontent.com |
GOOGLE_CLIENT_SECRET |
Google OAuth client secret | GOCSPX-xxx |
DATABASE_URL |
Production database URL | postgresql://user:pass@host/db |
RAILS_MASTER_KEY |
Rails credentials key | Auto-generated |
MAIL_HOST |
SMTP server host | smtp.gmail.com |
MAIL_PORT |
SMTP server port | 587 |
MAIL_USERNAME |
SMTP username | your-email@gmail.com |
MAIL_PASSWORD |
SMTP password | app-specific-password |
- Create a new Heroku app:
heroku create your-app-name- Add PostgreSQL:
heroku addons:create heroku-postgresql:mini- Set environment variables:
heroku config:set GOOGLE_CLIENT_ID=xxx
heroku config:set GOOGLE_CLIENT_SECRET=xxx- Deploy:
git push heroku main- Run migrations:
heroku run rails db:migrate- Install Railway CLI
- Run
railway login - Run
railway init - Configure environment variables in Railway dashboard
- Deploy with
railway up
- Real-time in-app notifications with ActionCable bell icon and dropdown
- Email notification preferences with granular user controls
- Push notifications ready for mobile app with FCM integration
- Daily/weekly digest emails with beautiful localized templates
- Complete internationalization of all notification features
- Device token management API endpoints for React Native integration
- API authentication with JWT
- Native mobile UI
- Push notifications
- Offline support
- Image uploads for items (ActiveStorage)
- Advanced search and filtering
- Occasion-based theming
- Gift recommendations
- Social sharing
- Fork the repository
- Create your feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add some AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
For issues, questions, or suggestions, please open an issue on GitHub.
This project is proprietary software. All rights reserved.
- Built with Ruby on Rails
- Styled with Tailwind CSS
- Icons from Heroicons
- Authentication by Devise