A platform for discovering and sharing meaningful quotes
Echoes is a quote discovery and sharing platform inspired by Pensador. Explore quotes by author, source, category, or keyword through a modern mobile experience.
- 📖 Explore Quotes - Search by author, category, source, or keyword
- ⭐ Favorite & Tag - Save and organize your favorite quotes
- 📱 Mobile First - Native mobile experience with React Native
- 🔐 User Accounts - Authentication and personalized collections
- 🎨 Modern Interface - Clean, intuitive design
This monorepo consists of:
- API - NestJS REST API with PostgreSQL/Prisma
- Mobile App - React Native app built with Expo
Ensure you have the following installed:
git clone https://github.com/carlos3g/echoes.git
cd echoes
yarn installCopy the example environment files and configure as needed:
cp .env.example .env
cp apps/api/.env.example apps/api/.env
cp apps/app/.env.example apps/app/.envRequired environment variables:
.env- Docker Compose configuration (MinIO credentials, service ports)apps/api/.env- Database connection, JWT secret, AWS/MinIO credentialsapps/app/.env- API URL (defaults tohttp://localhost:3000)
Start PostgreSQL, MinIO (S3-compatible storage), and Mailpit (email testing):
docker-compose up -dServices started:
- PostgreSQL:
localhost:5432 - MinIO:
localhost:9000(Console:localhost:8900) - Mailpit:
localhost:1025(Web UI:localhost:8025) - Nginx (MinIO proxy):
localhost:8080
Generate Prisma client, run migrations, and seed the database:
yarn db# Start both API and mobile app
yarn dev
# Or run individually:
yarn dev:api # API only
yarn dev:app # Mobile app onlyAccess the application:
- REST API: http://localhost:3000
- API Documentation: http://localhost:3000/api (Swagger)
- Mobile App: Expo DevTools in terminal
# Setup test database
yarn db:test
# Run all tests
yarn test
# Run E2E tests
yarn test:e2e
# API-specific (from apps/api):
yarn test # Unit tests (watch mode)
yarn test:cov # With coverage
yarn test:e2e # E2E tests# Format, lint, and type-check all packages
yarn style
# Individual packages:
yarn format # Prettier
yarn lint # ESLint
yarn check # TypeScript# From apps/api:
yarn db:generate # Generate Prisma client
yarn db:migrate # Push schema changes
yarn db:seed # Seed database
yarn db:fresh # Fresh database (generate + migrate + seed)echoes/
├── apps/
│ ├── api/ # NestJS REST API
│ │ ├── src/
│ │ │ ├── auth/ # Authentication module
│ │ │ ├── quote/ # Quotes management
│ │ │ ├── author/ # Authors
│ │ │ ├── category/ # Categories
│ │ │ ├── tag/ # User tags
│ │ │ └── ...
│ │ ├── prisma/ # Database schema & seeds
│ │ └── test/ # E2E tests
│ │
│ └── app/ # React Native mobile app
│ ├── src/
│ │ ├── features/ # Feature modules (auth, quote, tag)
│ │ ├── screens/ # Screen components
│ │ ├── navigation/ # React Navigation
│ │ ├── shared/ # Shared components & utils
│ │ └── lib/ # Third-party configs
│ └── ...
├── packages/ # Shared packages/libraries (future)
└── ...
- API: NestJS with module-based architecture, repository pattern, and use cases
- Mobile: Feature-based React Native with React Query for state management
- Database: PostgreSQL with Prisma ORM
- Storage: MinIO (S3-compatible) for file uploads
- Styling: NativeWind (Tailwind CSS for React Native)
This project uses:
- Conventional Commits - Enforced via commitlint
- Husky - Git hooks for pre-commit linting
- Turborepo - High-performance monorepo build system with smart caching
- The
docker-compose.yamlhas not been fully tested on ARM architecture - Package manager must be Yarn v4 (Berry) - do not use npm
- MinIO is used as S3-compatible storage for local development
MIT