An open API service indexing awesome lists of open source software.

https://github.com/efedeveloper/rick-morty-app

Angular app to list, search and explore Rick and Morty characters via REST and GraphQL.
https://github.com/efedeveloper/rick-morty-app

angular angular-material angular-signals graphql ngrx rest-api rick-and-morty rxjs typescript

Last synced: about 2 months ago
JSON representation

Angular app to list, search and explore Rick and Morty characters via REST and GraphQL.

Awesome Lists containing this project

README

          

# πŸ§‘β€πŸ’» Rick & Morty App β€” Modern Character Management SPA

Advanced character management and exploration SPA built with **Angular 19 + Tailwind CSS + NgRx + Apollo Client**, following principles of scalable architecture, maintainable code, and high-quality UX.

## πŸ—‚οΈ Table of Contents

- [Project Overview](#project-overview)
- [Tech Stack](#tech-stack)
- [Architecture & Technical Decisions](#architecture--technical-decisions)
- [Installation & Setup](#installation--setup)
- [Project Structure](#project-structure)
- [Best Practices & Conventions](#best-practices--conventions)
- [Contributing](#contributing)
- [License](#license)

## Project Overview

**Rick & Morty App** is a modular, maintainable, and scalable Single Page Application focused on consuming the Rick & Morty GraphQL API. It enables advanced character search, favorites management, filtering by species/status, and notificationsβ€”all with a strong UX focus.

## Tech Stack

- **Angular 19** πŸ…°οΈ β€” Robust framework for building SPAs.
- **TypeScript** πŸ”΅ β€” Static typing for clarity and robustness.
- **NgRx** 🟣 β€” Advanced state management (store, effects, entity).
- **Apollo Client** πŸš€ β€” Efficient GraphQL API integration.
- **Angular Material** 🎨 β€” Modern Material Design UI components.
- **Tailwind CSS** 🌈 β€” Utility-first CSS framework for fast, consistent styling.
- **RxJS** πŸ” β€” Reactive programming and advanced async flows.
- **Jasmine/Karma** πŸ§ͺ β€” Unit and integration testing.
- **ESLint + Prettier** 🧹 β€” Linting and automatic formatting.

## Architecture & Technical Decisions

- **Modular structure**: clear separation by feature in `/app`, with decoupled modules, services, and components.
- **State management**: centralized and scalable app state with NgRx Store and Effects.
- **GraphQL integration**: Apollo Client for efficient queries and mutations against the Rick & Morty API.
- **UI/UX**: Angular Material for consistent, responsive UI; Tailwind CSS for rapid utility-first styling.
- **Quality**: complete testing stack (Jasmine/Karma) and automated linting/formatting on every build.
- **Motivation**: Chosen stack and structure streamline team collaboration, scalability, and maintainability.

## Installation & Setup

Make sure you have **Node.js 20.x** installed.

```bash
git clone https://github.com/EfeDeveloper/rick-morty-app.git
cd rick-morty-app
npm install

# Start local development server
npm start
# or
ng serve

# App runs on http://localhost:4200

# Run unit tests
npm test
```

## Project Structure

```bash
rick-morty-app/
β”œβ”€β”€ src/
β”‚ β”œβ”€β”€ app/
β”‚ β”‚ β”œβ”€β”€ app.component.ts # Root Angular component
β”‚ β”‚ β”œβ”€β”€ app.component.html
β”‚ β”‚ β”œβ”€β”€ app.config.ts # Angular providers and configuration
β”‚ β”‚ β”œβ”€β”€ app.routes.ts # App routing
β”‚ β”‚ β”œβ”€β”€ core/ # Core services, constants, GraphQL queries
β”‚ β”‚ β”‚ β”œβ”€β”€ constants/
β”‚ β”‚ β”‚ β”œβ”€β”€ graphql/
β”‚ β”‚ β”‚ └── services/
β”‚ β”‚ β”œβ”€β”€ features/ # Feature modules and UI (filters, favorites, characters, totals)
β”‚ β”‚ β”‚ β”œβ”€β”€ characters/
β”‚ β”‚ β”‚ β”œβ”€β”€ favorite-bar/
β”‚ β”‚ β”‚ β”œβ”€β”€ filters-bar/
β”‚ β”‚ β”‚ └── totals-bar/
β”‚ β”‚ β”œβ”€β”€ models/ # TypeScript interfaces and models
β”‚ β”‚ β”œβ”€β”€ shared/ # Shared components and pipes
β”‚ β”‚ β”‚ β”œβ”€β”€ components/
β”‚ β”‚ β”‚ └── pipes/
β”‚ β”‚ └── store/ # NgRx store, reducers, actions
β”‚ β”‚ └── favorite/
β”‚ β”œβ”€β”€ environments/ # Environment configs (dev/prod)
β”‚ β”œβ”€β”€ index.html # App entry HTML
β”‚ β”œβ”€β”€ main.ts # App bootstrap
β”‚ └── styles.css # Global styles (Tailwind)
β”œβ”€β”€ public/ # Static assets (favicon, etc.)
β”œβ”€β”€ .vscode/ # VSCode workspace settings and tasks
β”œβ”€β”€ .angular/ # Angular CLI cache
β”œβ”€β”€ angular.json # Angular CLI configuration
β”œβ”€β”€ package.json # Dependencies and scripts
β”œβ”€β”€ tailwind.config.js # Tailwind CSS configuration
β”œβ”€β”€ tsconfig.json # TypeScript configuration
β”œβ”€β”€ tsconfig.app.json
β”œβ”€β”€ tsconfig.spec.json
β”œβ”€β”€ .editorconfig # EditorConfig rules
β”œβ”€β”€ .gitignore # Git ignore rules
β”œβ”€β”€ LICENSE # Project license
└── README.md # Project documentation
```

## Best Practices & Conventions

- Semantic commit messages with emojis for clarity.
- Functional, decoupled, and testable components.
- Strict TypeScript typing.
- Centralized and utility-first styling with Tailwind.
- Centralized error handling and user feedback.
- Automatic linting & formatting on every commit/CI.

## Contributing

1. Fork the repo and create a descriptive branch (e.g., feature/add-search).
2. Write code, tests, and make sure lint passes.
3. Create a clear Pull Request explaining your changes.

All contributions are welcome! πŸš€

## License

[MIT](LICENSE)