Trung Vo
Trung Vo, web expert with 10 years of experience, Google Developer Expert in Angular, fosters web dev communities and speaks globally, based in Singapore.
Frontend Engineer
AngularAir - 21 Nov 2020
Hi, My name is Trung 😊
What is Angular Jira Clone?
Motivation
High Level Architecture
Technical Decisions
TailwindCSS
ngrx vs Akita
Deploy to Netlify/Heroku
Q&A
A utility-first CSS framework packed with classes like flex, pt-4, text-center and rotate-90 that can be composed to build any design, directly in your markup.
5/10 Front end engineer that I know don' really enjoy writing CSS
Trung Vo
I always encounter some use case where I need to set a simple CSS
padding-left: 5px
margin: 0 auto
cursor: pointer
<button style="padding-left: 5px;">Submit</button>
<i style="cursor: pointer;"></i>
✅ Quick
❌ Difficult to override
❌ Messy code base
<button class="my-button">Submit</button>
<i class="fa fa-help my-icon"></i>
✅ More structure code,
✅ Encapsulated in a component
❌ If scoped inside a component, won't be able to reuse
.my-button {
padding-left: 5px;
}
.my-icon {
cursor: pointer;
}
<button class="pl-1">Submit</button>
<i class="fa fa-help pl-1 icon-active"></i>
✅ Can reuse the class
❌ Need to spend effort to structure CSS code
❌ Difficult for team member to follow without guideline
.pl-1 {
padding-left: 5px;
}
.icon-active {
cursor: pointer;
}
✅ Clear documentation with most of the util class written
✅ Maintain by a big community
✅ Integrated IDE support
✅ Support PurgeCSS, only load what you actually use for production bundle
✅ Reuse the same class, bundle size could be smaller
✅ Easy customization
❌ Learning curve for new team member
<button
class="bg-transparent
text-blue-700
font-semibold
hover:bg-blue-500
hover:text-white
hover:border-transparent
py-2
px-4
border
border-blue-500
rounded"
>
Submit
</button>
.btn-tailwind {
@apply bg-transparent text-blue-700 font-semibold py-2 px-4 border border-blue-500 rounded;
&:hover {
@apply bg-blue-500 text-white border-transparent;
}
}
Content
Sidebar
Nav
✅ Avoid state manipulation everywhere
✅ Predictable data flow
✅ Easy to isolate bug
✅ Consistent when dealing with asynchronous
❌ NOT an easy concept to grasp.
<ProjectComponent [data]='data'>
<BoardComponent [data]='data'>
<BoardDndComponent [data]='data'>
<BoardDndListComponent [data]='data'>
</BoardDndListComponent>
</BoardDndComponent>
</BoardComponent>
</ProjectComponent>
Let’s start with the boilerplate issue. Whenever I needed to use ngrx, I had to:
It’s not a big problem if it’s not often needed. But fetching data from API is what front end dev do, though!
RxJS
Angular
Modules
Dependency Injection
Components
Service
Observable
Decorator
switchMap
concatMap
whateverMap
Subject
BehaviorSubject
ReplaySubject
ngrx
Action
Dispatcher
Reducer
Effect
Selector
A state management pattern
Netlify is an automation platform for web projects that is focused toward frontend developers.
The main features include continuous integration out of the box, free SSL, and CDN. The platform is great of the easy of use, fast deployment, and continuous integration.
I used Netlify to host the frontend
Heroku is a cloud application platform
Heroku lets app developers spend 100% of their time on their application code, not managing servers, deployment, ongoing operations, or scaling.
I used Heroku to host my API
Special thanks to Connie Leung 😁
By Trung Vo
Deck for talk.js #40 https://github.com/SingaporeJS/talk.js/issues/40
Trung Vo, web expert with 10 years of experience, Google Developer Expert in Angular, fosters web dev communities and speaks globally, based in Singapore.