igor-morev/angular-slack
A simplified Slack messenger built with Angular 17, Nx workspace, ngrx, TailwingCSS and Taiga UI.
Angular Slack
A simplified Slack messenger built with Angular 17, Nx workspace, ngrx, TailwingCSS and Taiga UI.
This is not only a Slack clone built with Angular, but also an example of a modern Angular codebase and how it can be used for a messenger kind of app, especially, with NX workspace.
Working application
Check out the live demo -> https://ng-slack.netlify.app
Support
If you like my work, feel free to:
- โญ this repository
Thanks for supporting me!
Motivation of this project ๐
Trung's project https://github.com/trungvose/angular-spotify inspired and motivated me to create this one. Thank you so much.
I've been working with Angular for about six years and regularly using Slack at my work. I like this experience.
So, I decided to implement basic Slack features, especially Threads and imitate the user interface as well. Threads are my most lovely ones, which were challenging ๐, actually. But I think the result is good. Also, it can be proof of my skills and experience, because most of my real projects are enterprise-like and closed by NDA.
Aside the tech area, it's an app which focuses only on a frontend part. But it has a mocked backend API (for showcase with ngrx effects) which can be switched on a real API next time. By the way, I've also experimented with libraries as i wanted to try before: NX, TaiwindCSS and brand-new ngrx features like @ngrx/signals.
I've been working on it in my spare time for about two months. There are many Angular examples on the web but most of them are way too simple. I like to think that this codebase contains good cases for a messenger-like app architecture to offer valuable insights to Angular developers.
Tech stack
- Angular 17
- Nx Workspace
- ngrx
- Taiga UI UI component:
avatar,dropdown,dialog,hint,inputand more - TailwindCSS
- angular cdk packages includes:
OverlayandScrolling - ngx-quill
- ngx-emoji-mart
- Netlify for deployment
High-level design
Principles
All components are following:
- OnPush Change Detection and async pipes: all components use observable and async pipe for rendering data without any single manual subscribe
- Standalone components. I use modern Angular, and keep all components as a standalone by default
- Mostly, everything will stay in the
libsfolder.
Structure
I followed the structure recommended by official documentation and DDD
.
โโโ root
โโโ apps
โ โโโ angular-slack
โโโ libs
โโโ client (dir)
โ โโโ feature-shell (angular:lib) - root page and main routes
โ โโโ data-access (angular:lib, state management)
โโโ workspace (dir)
โ โโโ feature-shell (angular:lib) - client chats entry point (channels, contacts, threads, etc.)
โโโ auth (dir)
โ โโโ data-access (angular:lib) - store, services and models for mocked auth
โโโ tab-rail (dir)
โ โโโ feature-tab-rail (angular:lib)
โโโ chat (dir) - chat-views domain for sending messages
โ โโโ data-access-messages (angular:lib)
โ โโโ feature-channel-chat-view (angular:lib)
โ โโโ feature-primary-view (angular:lib)
โ โโโ feature-thread-chat-view (angular:lib)
โโโ channels (dir)
โ โโโ data-access-channels (angular:lib)
โ โโโ feature-create-channels (angular:lib)
โ โโโ feature-edit-channels (angular:lib)
โโโ contacts (dir)
โ โโโ data-access-contacts (angular:lib)
โโโ threads (dir)
โ โโโ data-access-threads (angular:lib)
โ โโโ feature-threads (angular:lib)
โ โโโ ui-thread-card (angular:lib)
โโโ shared (dir)
โโโ data-access (dir)
โโโ ui-store (angular:lib) - shared ngrx signal store for secondary UI
โโโ slack-api (angular:lib) - mocked api services, models
โโโ ui-message (angular:lib)
โโโ ui-message-editor (angular:lib)
โโโ pipes (dir)
โโโ utils (angular:lib, shared pure functions, helpers)
Dependency Graph
Nx provides an dependency graph out of the box. To view it on your browser, clone my repository and run:
npm run graphA simplified graph looks like the following. It gives you insightful information for your mono repo and is especially helpful when multiple projects depend on each other.
Features and Roadmap
1.0 - Simple Slack clone (no backend API)
March 15, 2024
- Proven, scalable, and easy to understand the structure with Nx workspace
- Send message to channel
- Send direct message
- Send thread message
- Create and edit threads
- View all threads grouped by chats on separate page
- Attach emoji to any message
- Create and edit channels
- Good-looking user interface which reminds Slack ๐คช
2.0 - Proven API to send message, create channels, threads, etc.
TBD
- Build backend with Nest Js and Socket.io
- Authentication
Accessibility โฟ
I use semantics tags and Taiga UI provides accessible UI components
Setting up the development environment ๐
git clone https://github.com/Morev1993/angular-slack.gitcd angular-slacknpm installnpm startfor starting Angular web application- The app should run on
http://localhost:4200/
Author: Igor Morev ๐ค
- A passionate front-end engineer with nine years of experience
Contributing
If you have any ideas, just open an issue and tell me what you think.
If you'd like to contribute, please fork the repository and make changes as you'd like. Pull requests are warmly welcome.
License
Feel free to use my code on your project. Please put a reference to this repository.


