Skip to content

carlos3g/echoes

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

103 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Echoes

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.

Features

  • 📖 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

Tech Stack

This monorepo consists of:

  • API - NestJS REST API with PostgreSQL/Prisma
  • Mobile App - React Native app built with Expo

Prerequisites

Ensure you have the following installed:

Getting Started

1. Clone and Install

git clone https://github.com/carlos3g/echoes.git
cd echoes
yarn install

2. Environment Setup

Copy 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/.env

Required environment variables:

  • .env - Docker Compose configuration (MinIO credentials, service ports)
  • apps/api/.env - Database connection, JWT secret, AWS/MinIO credentials
  • apps/app/.env - API URL (defaults to http://localhost:3000)

3. Start Docker Services

Start PostgreSQL, MinIO (S3-compatible storage), and Mailpit (email testing):

docker-compose up -d

Services started:

  • PostgreSQL: localhost:5432
  • MinIO: localhost:9000 (Console: localhost:8900)
  • Mailpit: localhost:1025 (Web UI: localhost:8025)
  • Nginx (MinIO proxy): localhost:8080

4. Initialize Database

Generate Prisma client, run migrations, and seed the database:

yarn db

5. Start Development Servers

# Start both API and mobile app
yarn dev

# Or run individually:
yarn dev:api   # API only
yarn dev:app   # Mobile app only

Access the application:

Development

Running Tests

# 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

Code Quality

# Format, lint, and type-check all packages
yarn style

# Individual packages:
yarn format            # Prettier
yarn lint              # ESLint
yarn check             # TypeScript

Database Management

# 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)

Project Structure

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)
└── ...

Architecture

  • 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)

Contributing

This project uses:

  • Conventional Commits - Enforced via commitlint
  • Husky - Git hooks for pre-commit linting
  • Turborepo - High-performance monorepo build system with smart caching

Notes

  • The docker-compose.yaml has 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

License

MIT

About

Mobile-first social platform for discovering, collecting, and sharing quotes — Turborepo monorepo with a NestJS API and an Expo React Native app

Topics

Resources

Stars

Watchers

Forks

Contributors