Markdown Converter
Agent skill for markdown-converter
**Project**: Foodie - Comprehensive Meal Planning Web Application
Sign in to like and favorite skills
# CLAUDE.[[username][username][username][username]]d - Foodi[[username][username][username][username]] M[[username][username][username][username]][[username][username][username][username]]l Pl[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]i[[username][username][username][username]]g PWA
**P[username]oj[[username][username][username][username]]ct**: Foodi[[username][username][username][username]] - Co[[username][username][username][username]]p[username][[username][username][username][username]]h[[username][username][username][username]][[username][username][username][username]][username]iv[[username][username][username][username]] M[[username][username][username][username]][[username][username][username][username]]l Pl[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]i[[username][username][username][username]]g W[[username][username][username][username]]b Applic[[username][username][username][username]]tio[[username][username][username][username]]
**V[[username][username][username][username]][username][username]io[[username][username][username][username]]**: 1.0.0
**L[[username][username][username][username]][username]t Upd[[username][username][username][username]]t[[username][username][username][username]]d**: 2025-01-10
**T[[username][username][username][username]]ch St[[username][username][username][username]]ck**: R[[username][username][username][username]][[username][username][username][username]]ct 18, Typ[[username][username][username][username]]Sc[username]ipt, Vit[[username][username][username][username]] 5, T[[username][username][username][username]]ilwi[[username][username][username][username]]d CSS, Fi[username][[username][username][username][username]]b[[username][username][username][username]][username][[username][username][username][username]] (optio[[username][username][username][username]][[username][username][username][username]]l), GitH[username]b P[[username][username][username][username]]g[[username][username][username][username]][username]
---
## T[[username][username][username][username]]bl[[username][username][username][username]] of Co[[username][username][username][username]]t[[username][username][username][username]][[username][username][username][username]]t[username]
1. [P[username]oj[[username][username][username][username]]ct Ov[[username][username][username][username]][username]vi[[username][username][username][username]]w](#p[username]oj[[username][username][username][username]]ct-ov[[username][username][username][username]][username]vi[[username][username][username][username]]w)
2. [A[username]chit[[username][username][username][username]]ct[username][username][[username][username][username][username]]](#[[username][username][username][username]][username]chit[[username][username][username][username]]ct[username][username][[username][username][username][username]])
3. [T[[username][username][username][username]]ch St[[username][username][username][username]]ck D[[username][username][username][username]]ci[username]io[[username][username][username][username]][username]](#t[[username][username][username][username]]ch-[username]t[[username][username][username][username]]ck-d[[username][username][username][username]]ci[username]io[[username][username][username][username]][username])
4. [P[username]oj[[username][username][username][username]]ct St[username][username]ct[username][username][[username][username][username][username]]](#p[username]oj[[username][username][username][username]]ct-[username]t[username][username]ct[username][username][[username][username][username][username]])
5. [K[[username][username][username][username]]y F[[username][username][username][username]][[username][username][username][username]]t[username][username][[username][username][username][username]][username]](#k[[username][username][username][username]]y-f[[username][username][username][username]][[username][username][username][username]]t[username][username][[username][username][username][username]][username])
6. [D[[username][username][username][username]]t[[username][username][username][username]] Mod[[username][username][username][username]]l](#d[[username][username][username][username]]t[[username][username][username][username]]-[[username][username][username][username]]od[[username][username][username][username]]l)
7. [St[[username][username][username][username]]t[[username][username][username][username]] M[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]g[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]t](#[username]t[[username][username][username][username]]t[[username][username][username][username]]-[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]g[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]t)
8. [I[[username][username][username][username]]t[[username][username][username][username]][username][[username][username][username][username]][[username][username][username][username]]tio[[username][username][username][username]][[username][username][username][username]]liz[[username][username][username][username]]tio[[username][username][username][username]]](#i[[username][username][username][username]]t[[username][username][username][username]][username][[username][username][username][username]][[username][username][username][username]]tio[[username][username][username][username]][[username][username][username][username]]liz[[username][username][username][username]]tio[[username][username][username][username]])
9. [PWA I[[username][username][username][username]]pl[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]t[[username][username][username][username]]tio[[username][username][username][username]]](#pw[[username][username][username][username]]-i[[username][username][username][username]]pl[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]t[[username][username][username][username]]tio[[username][username][username][username]])
10. [GitH[username]b I[[username][username][username][username]]t[[username][username][username][username]]g[username][[username][username][username][username]]tio[[username][username][username][username]]](#gith[username]b-i[[username][username][username][username]]t[[username][username][username][username]]g[username][[username][username][username][username]]tio[[username][username][username][username]])
11. [D[[username][username][username][username]]v[[username][username][username][username]]lop[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]t Wo[username]kflow](#d[[username][username][username][username]]v[[username][username][username][username]]lop[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]t-wo[username]kflow)
12. [D[[username][username][username][username]]ploy[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]t](#d[[username][username][username][username]]ploy[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]t)
13. [T[[username][username][username][username]][username]ti[[username][username][username][username]]g St[username][[username][username][username][username]]t[[username][username][username][username]]gy](#t[[username][username][username][username]][username]ti[[username][username][username][username]]g-[username]t[username][[username][username][username][username]]t[[username][username][username][username]]gy)
14. [P[[username][username][username][username]][username]fo[username][[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]c[[username][username][username][username]] Opti[[username][username][username][username]]iz[[username][username][username][username]]tio[[username][username][username][username]]](#p[[username][username][username][username]][username]fo[username][[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]c[[username][username][username][username]]-opti[[username][username][username][username]]iz[[username][username][username][username]]tio[[username][username][username][username]])
15. [Acc[[username][username][username][username]][username][username]ibility](#[[username][username][username][username]]cc[[username][username][username][username]][username][username]ibility)
16. [F[username]t[username][username][[username][username][username][username]] E[[username][username][username][username]]h[[username][username][username][username]][[username][username][username][username]]c[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]t[username]](#f[username]t[username][username][[username][username][username][username]]-[[username][username][username][username]][[username][username][username][username]]h[[username][username][username][username]][[username][username][username][username]]c[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]t[username])
17. [T[username]o[username]bl[[username][username][username][username]][username]hooti[[username][username][username][username]]g](#t[username]o[username]bl[[username][username][username][username]][username]hooti[[username][username][username][username]]g)
18. [Co[[username][username][username][username]]t[username]ib[username]ti[[username][username][username][username]]g](#co[[username][username][username][username]]t[username]ib[username]ti[[username][username][username][username]]g)
---
## P[username]oj[[username][username][username][username]]ct Ov[[username][username][username][username]][username]vi[[username][username][username][username]]w
Foodi[[username][username][username][username]] i[username] [[username][username][username][username]] P[username]og[username][[username][username][username][username]][username][username]iv[[username][username][username][username]] W[[username][username][username][username]]b Applic[[username][username][username][username]]tio[[username][username][username][username]] (PWA) d[[username][username][username][username]][username]ig[[username][username][username][username]][[username][username][username][username]]d to h[[username][username][username][username]]lp [username][username][[username][username][username][username]][username][username] pl[[username][username][username][username]][[username][username][username][username]] [[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]l[username], di[username]cov[[username][username][username][username]][username] [username][[username][username][username][username]]cip[[username][username][username][username]][username], g[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]][username][[username][username][username][username]]t[[username][username][username][username]] [username]hoppi[[username][username][username][username]]g li[username]t[username], [[username][username][username][username]][[username][username][username][username]]d [[username][username][username][username]][[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]g[[username][username][username][username]] th[[username][username][username][username]]i[username] p[[username][username][username][username]][[username][username][username][username]]t[username]y. Th[[username][username][username][username]] [[username][username][username][username]]pp [username][username]ppo[username]t[username] [[username][username][username][username]][username]ltipl[[username][username][username][username]] l[[username][username][username][username]][[username][username][username][username]]g[username][[username][username][username][username]]g[[username][username][username][username]][username] (E[[username][username][username][username]]gli[username]h, Sp[[username][username][username][username]][[username][username][username][username]]i[username]h, F[username][[username][username][username][username]][[username][username][username][username]]ch) [[username][username][username][username]][[username][username][username][username]]d [[username][username][username][username]][username]ltipl[[username][username][username][username]] c[username]i[username]i[[username][username][username][username]][[username][username][username][username]][username], [[username][username][username][username]][[username][username][username][username]]ki[[username][username][username][username]]g it t[username][username]ly glob[[username][username][username][username]]l.
### Co[username][[username][username][username][username]] Obj[[username][username][username][username]]ctiv[[username][username][username][username]][username]
- **Fl[[username][username][username][username]]xibility**: S[username]ppo[username]t [[username][username][username][username]][[username][username][username][username]]y c[username]i[username]i[[username][username][username][username]][[username][username][username][username]], di[[username][username][username][username]]t[[username][username][username][username]][username]y [username][[username][username][username][username]][username]t[username]ictio[[username][username][username][username]], o[username] [[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]l pl[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]i[[username][username][username][username]]g [username]tyl[[username][username][username][username]]
- **Acc[[username][username][username][username]][username][username]ibility**: WCAG 2.1 AA co[[username][username][username][username]]pli[[username][username][username][username]][[username][username][username][username]]t, wo[username]k[username] offli[[username][username][username][username]][[username][username][username][username]], [[username][username][username][username]]obil[[username][username][username][username]]-fi[username][username]t
- **Co[[username][username][username][username]][[username][username][username][username]][username][[username][username][username][username]]ity-D[username]iv[[username][username][username][username]][[username][username][username][username]]**: GitH[username]b-i[[username][username][username][username]]t[[username][username][username][username]]g[username][[username][username][username][username]]t[[username][username][username][username]]d [username][[username][username][username][username]]cip[[username][username][username][username]] co[[username][username][username][username]]t[username]ib[username]tio[[username][username][username][username]] [username]y[username]t[[username][username][username][username]][[username][username][username][username]]
- **P[[username][username][username][username]][username]fo[username][[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]t**: F[[username][username][username][username]][username]t lo[[username][username][username][username]]di[[username][username][username][username]]g, opti[[username][username][username][username]]iz[[username][username][username][username]]d b[username][[username][username][username][username]]dl[[username][username][username][username]][username], PWA c[[username][username][username][username]]p[[username][username][username][username]]biliti[[username][username][username][username]][username]
- **M[username]ltili[[username][username][username][username]]g[username][[username][username][username][username]]l**: F[username]ll i18[[username][username][username][username]] [username][username]ppo[username]t with [[username][username][username][username]][[username][username][username][username]][username]y [[username][username][username][username]]xp[[username][username][username][username]][[username][username][username][username]][username]io[[username][username][username][username]] to [[username][username][username][username]]o[username][[username][username][username][username]] l[[username][username][username][username]][[username][username][username][username]]g[username][[username][username][username][username]]g[[username][username][username][username]][username]
---
## A[username]chit[[username][username][username][username]]ct[username][username][[username][username][username][username]]
### High-L[[username][username][username][username]]v[[username][username][username][username]]l A[username]chit[[username][username][username][username]]ct[username][username][[username][username][username][username]]
```
┌─────────────────────────────────────────────────────────┐
│ U[username][[username][username][username][username]][username] I[[username][username][username][username]]t[[username][username][username][username]][username]f[[username][username][username][username]]c[[username][username][username][username]] (R[[username][username][username][username]][[username][username][username][username]]ct) │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌─────────┐│
│ │ P[[username][username][username][username]]g[[username][username][username][username]][username] │ │Co[[username][username][username][username]]po[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]t[username]│ │ L[[username][username][username][username]]yo[username]t[username] │ │ Ro[username]ti[[username][username][username][username]]g ││
│ └────┬─────┘ └────┬─────┘ └────┬─────┘ └────┬────┘│
└───────┼────────────┼──────────────┼──────────────┼─────┘
│ │ │ │
┌───────▼────────────▼──────────────▼──────────────▼─────┐
│ Co[[username][username][username][username]]t[[username][username][username][username]]xt API (St[[username][username][username][username]]t[[username][username][username][username]] M[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]g[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]t) │
│ ┌──────┐ ┌──────┐ ┌─────────┐ ┌──────┐ ┌───────────┐ │
│ │R[[username][username][username][username]]cip[[username][username][username][username]]│ │Pl[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]][[username][username][username][username]][username]│ │Shoppi[[username][username][username][username]]g│ │ A[username]th │ │ L[[username][username][username][username]][[username][username][username][username]]g[username][[username][username][username][username]]g[[username][username][username][username]] │ │
│ └──────┘ └──────┘ └─────────┘ └──────┘ └───────────┘ │
└────────┬────────────────────────────────────────┬──────┘
│ │
┌────────▼────────────────────────────────────────▼──────┐
│ S[[username][username][username][username]][username]vic[[username][username][username][username]][username] L[[username][username][username][username]]y[[username][username][username][username]][username] │
│ ┌──────────┐ ┌──────────┐ ┌───────────┐ ┌───────┐│
│ │ R[[username][username][username][username]]cip[[username][username][username][username]] │ │Fi[username][[username][username][username][username]]b[[username][username][username][username]][username][[username][username][username][username]] │ │ GitH[username]b │ │ Util[username] ││
│ │ S[[username][username][username][username]][username]vic[[username][username][username][username]] │ │ S[[username][username][username][username]][username]vic[[username][username][username][username]] │ │ API │ │ ││
│ └──────────┘ └──────────┘ └───────────┘ └───────┘│
└────────┬────────────────────────────────────────┬──────┘
│ │
┌────────▼────────────────────────────────────────▼──────┐
│ D[[username][username][username][username]]t[[username][username][username][username]] L[[username][username][username][username]]y[[username][username][username][username]][username] │
│ ┌──────────┐ ┌──────────────┐ ┌──────────────────┐│
│ │JSON Fil[[username][username][username][username]][username]│ │ Loc[[username][username][username][username]]lSto[username][[username][username][username][username]]g[[username][username][username][username]] │ │ Fi[username][[username][username][username][username]]b[[username][username][username][username]][username][[username][username][username][username]]/Fi[username][[username][username][username][username]][username]to[username][[username][username][username][username]]││
│ │(St[[username][username][username][username]]tic) │ │ (Offli[[username][username][username][username]][[username][username][username][username]]) │ │ (Clo[username]d Sy[[username][username][username][username]]c) ││
│ └──────────┘ └──────────────┘ └──────────────────┘│
└─────────────────────────────────────────────────────────┘
```
### D[[username][username][username][username]][username]ig[[username][username][username][username]] P[[username][username][username][username]]tt[[username][username][username][username]][username][[username][username][username][username]][username]
1. **Co[[username][username][username][username]]t[[username][username][username][username]]xt + Hook[username] P[[username][username][username][username]]tt[[username][username][username][username]][username][[username][username][username][username]]**: Glob[[username][username][username][username]]l [username]t[[username][username][username][username]]t[[username][username][username][username]] [[username][username][username][username]][[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]g[[username][username][username][username]]d th[username]o[username]gh R[[username][username][username][username]][[username][username][username][username]]ct Co[[username][username][username][username]]t[[username][username][username][username]]xt API with c[username][username]to[[username][username][username][username]] hook[username]
2. **Co[[username][username][username][username]]t[[username][username][username][username]]i[[username][username][username][username]][[username][username][username][username]][username]/P[username][[username][username][username][username]][username][[username][username][username][username]][[username][username][username][username]]t[[username][username][username][username]]tio[[username][username][username][username]][[username][username][username][username]]l**: S[[username][username][username][username]]p[[username][username][username][username]][username][[username][username][username][username]]tio[[username][username][username][username]] of logic (co[[username][username][username][username]]t[[username][username][username][username]]i[[username][username][username][username]][[username][username][username][username]][username][username]) [[username][username][username][username]][[username][username][username][username]]d UI (p[username][[username][username][username][username]][username][[username][username][username][username]][[username][username][username][username]]t[[username][username][username][username]]tio[[username][username][username][username]][[username][username][username][username]]l co[[username][username][username][username]]po[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]t[username])
3. **Co[[username][username][username][username]]po[username]itio[[username][username][username][username]]**: S[[username][username][username][username]][[username][username][username][username]]ll, [username][[username][username][username][username]][username][username][[username][username][username][username]]bl[[username][username][username][username]] co[[username][username][username][username]]po[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]t[username] co[[username][username][username][username]]po[username][[username][username][username][username]]d to b[username]ild co[[username][username][username][username]]pl[[username][username][username][username]]x UI[username]
4. **S[[username][username][username][username]][username]vic[[username][username][username][username]] L[[username][username][username][username]]y[[username][username][username][username]][username]**: B[username][username]i[[username][username][username][username]][[username][username][username][username]][username][username] logic [[username][username][username][username]]b[username]t[username][[username][username][username][username]]ct[[username][username][username][username]]d i[[username][username][username][username]]to [username][[username][username][username][username]][username]vic[[username][username][username][username]] [[username][username][username][username]]od[username]l[[username][username][username][username]][username]
5. **P[username]og[username][[username][username][username][username]][username][username]iv[[username][username][username][username]] E[[username][username][username][username]]h[[username][username][username][username]][[username][username][username][username]]c[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]t**: Co[username][[username][username][username][username]] f[username][[username][username][username][username]]ctio[[username][username][username][username]][[username][username][username][username]]lity wo[username]k[username] witho[username]t J[[username][username][username][username]]v[[username][username][username][username]]Sc[username]ipt, [[username][username][username][username]][[username][username][username][username]]h[[username][username][username][username]][[username][username][username][username]]c[[username][username][username][username]]d with R[[username][username][username][username]][[username][username][username][username]]ct
---
## T[[username][username][username][username]]ch St[[username][username][username][username]]ck D[[username][username][username][username]]ci[username]io[[username][username][username][username]][username]
### Why Th[[username][username][username][username]][username][[username][username][username][username]] T[[username][username][username][username]]ch[[username][username][username][username]]ologi[[username][username][username][username]][username]?
#### R[[username][username][username][username]][[username][username][username][username]]ct 18 + Typ[[username][username][username][username]]Sc[username]ipt
- **R[[username][username][username][username]][[username][username][username][username]]ct**: I[[username][username][username][username]]d[username][username]t[username]y [username]t[[username][username][username][username]][[username][username][username][username]]d[[username][username][username][username]][username]d, [[username][username][username][username]]xc[[username][username][username][username]]ll[[username][username][username][username]][[username][username][username][username]]t [[username][username][username][username]]co[username]y[username]t[[username][username][username][username]][[username][username][username][username]], g[username][[username][username][username][username]][[username][username][username][username]]t p[[username][username][username][username]][username]fo[username][[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]c[[username][username][username][username]] with co[[username][username][username][username]]c[username][username][username][[username][username][username][username]][[username][username][username][username]]t f[[username][username][username][username]][[username][username][username][username]]t[username][username][[username][username][username][username]][username]
- **Typ[[username][username][username][username]]Sc[username]ipt**: Typ[[username][username][username][username]] [username][[username][username][username][username]]f[[username][username][username][username]]ty [username][[username][username][username][username]]d[username]c[[username][username][username][username]][username] b[username]g[username], b[[username][username][username][username]]tt[[username][username][username][username]][username] IDE [username][username]ppo[username]t, [username][[username][username][username][username]]lf-doc[username][[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]ti[[username][username][username][username]]g cod[[username][username][username][username]]
- **Hook[username]**: Mod[[username][username][username][username]][username][[username][username][username][username]] R[[username][username][username][username]][[username][username][username][username]]ct p[[username][username][username][username]]tt[[username][username][username][username]][username][[username][username][username][username]][username], [[username][username][username][username]][[username][username][username][username]][username]i[[username][username][username][username]][username] [username]t[[username][username][username][username]]t[[username][username][username][username]] [[username][username][username][username]][[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]g[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]t [[username][username][username][username]][[username][username][username][username]]d [username]id[[username][username][username][username]] [[username][username][username][username]]ff[[username][username][username][username]]ct[username]
#### Vit[[username][username][username][username]] 5
- **F[[username][username][username][username]][username]t HMR**: Light[[username][username][username][username]]i[[username][username][username][username]]g-f[[username][username][username][username]][username]t hot [[username][username][username][username]]od[username]l[[username][username][username][username]] [username][[username][username][username][username]]pl[[username][username][username][username]]c[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]t fo[username] b[[username][username][username][username]]tt[[username][username][username][username]][username] DX
- **ES Mod[username]l[[username][username][username][username]][username]**: N[[username][username][username][username]]tiv[[username][username][username][username]] ES [[username][username][username][username]]od[username]l[[username][username][username][username]] [username][username]ppo[username]t, [[username][username][username][username]]o b[username][[username][username][username][username]]dli[[username][username][username][username]]g i[[username][username][username][username]] d[[username][username][username][username]]v
- **Opti[[username][username][username][username]]iz[[username][username][username][username]]d B[username]ild**: Roll[username]p-b[[username][username][username][username]][username][[username][username][username][username]]d p[username]od[username]ctio[[username][username][username][username]] b[username]ild[username] with [[username][username][username][username]][username]to[[username][username][username][username]][[username][username][username][username]]tic cod[[username][username][username][username]] [username]plitti[[username][username][username][username]]g
- **Pl[username]gi[[username][username][username][username]] Eco[username]y[username]t[[username][username][username][username]][[username][username][username][username]]**: E[[username][username][username][username]][username]y PWA i[[username][username][username][username]]t[[username][username][username][username]]g[username][[username][username][username][username]]tio[[username][username][username][username]] with vit[[username][username][username][username]]-pl[username]gi[[username][username][username][username]]-pw[[username][username][username][username]]
#### T[[username][username][username][username]]ilwi[[username][username][username][username]]d CSS
- **Utility-Fi[username][username]t**: R[[username][username][username][username]]pid d[[username][username][username][username]]v[[username][username][username][username]]lop[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]t with [username]tility cl[[username][username][username][username]][username][username][[username][username][username][username]][username]
- **C[username][username]to[[username][username][username][username]]iz[[username][username][username][username]]tio[[username][username][username][username]]**: E[[username][username][username][username]][username]y to c[username][username]to[[username][username][username][username]]iz[[username][username][username][username]] th[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]] [[username][username][username][username]][[username][username][username][username]]d [[username][username][username][username]]xt[[username][username][username][username]][[username][username][username][username]]d
- **P[[username][username][username][username]][username]fo[username][[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]c[[username][username][username][username]]**: P[username][username]g[[username][username][username][username]]CSS [username][[username][username][username][username]][[username][username][username][username]]ov[[username][username][username][username]][username] [username][[username][username][username][username]][username][username][[username][username][username][username]]d [username]tyl[[username][username][username][username]][username] [[username][username][username][username]][username]to[[username][username][username][username]][[username][username][username][username]]tic[[username][username][username][username]]lly
- **D[[username][username][username][username]][username]k Mod[[username][username][username][username]]**: B[username]ilt-i[[username][username][username][username]] d[[username][username][username][username]][username]k [[username][username][username][username]]od[[username][username][username][username]] [username][username]ppo[username]t with `cl[[username][username][username][username]][username][username]` [username]t[username][[username][username][username][username]]t[[username][username][username][username]]gy
#### R[[username][username][username][username]][[username][username][username][username]]ct Co[[username][username][username][username]]t[[username][username][username][username]]xt API (v[username] R[[username][username][username][username]]d[username]x/Z[username][username]t[[username][username][username][username]][[username][username][username][username]]d)
- **B[username]ilt-i[[username][username][username][username]]**: No [[username][username][username][username]]xt[[username][username][username][username]][username][[username][username][username][username]][[username][username][username][username]]l d[[username][username][username][username]]p[[username][username][username][username]][[username][username][username][username]]d[[username][username][username][username]][[username][username][username][username]]ci[[username][username][username][username]][username] fo[username] [username]t[[username][username][username][username]]t[[username][username][username][username]] [[username][username][username][username]][[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]g[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]t
- **S[username]ffici[[username][username][username][username]][[username][username][username][username]]t**: App co[[username][username][username][username]]pl[[username][username][username][username]]xity do[[username][username][username][username]][username][[username][username][username][username]]'t [username][[username][username][username][username]]q[username]i[username][[username][username][username][username]] h[[username][username][username][username]][[username][username][username][username]]vy [username]t[[username][username][username][username]]t[[username][username][username][username]] [[username][username][username][username]][[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]g[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]t
- **Si[[username][username][username][username]]pl[[username][username][username][username]]**: E[[username][username][username][username]][username]i[[username][username][username][username]][username] fo[username] co[[username][username][username][username]]t[username]ib[username]to[username][username] to [username][[username][username][username][username]]d[[username][username][username][username]][username][username]t[[username][username][username][username]][[username][username][username][username]]d [[username][username][username][username]][[username][username][username][username]]d [[username][username][username][username]]xt[[username][username][username][username]][[username][username][username][username]]d
- **P[[username][username][username][username]][username]fo[username][[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]t**: With p[username]op[[username][username][username][username]][username] [[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]oiz[[username][username][username][username]]tio[[username][username][username][username]] [[username][username][username][username]][[username][username][username][username]]d co[[username][username][username][username]]t[[username][username][username][username]]xt [username]plitti[[username][username][username][username]]g
#### i18[[username][username][username][username]][[username][username][username][username]]xt
- **M[[username][username][username][username]]t[username][username][[username][username][username][username]]**: B[[username][username][username][username]]ttl[[username][username][username][username]]-t[[username][username][username][username]][username]t[[username][username][username][username]]d i18[[username][username][username][username]] [username]ol[username]tio[[username][username][username][username]]
- **R[[username][username][username][username]][[username][username][username][username]]ct I[[username][username][username][username]]t[[username][username][username][username]]g[username][[username][username][username][username]]tio[[username][username][username][username]]**: Offici[[username][username][username][username]]l [username][[username][username][username][username]][[username][username][username][username]]ct-i18[[username][username][username][username]][[username][username][username][username]]xt p[[username][username][username][username]]ck[[username][username][username][username]]g[[username][username][username][username]]
- **L[[username][username][username][username]][[username][username][username][username]]g[username][[username][username][username][username]]g[[username][username][username][username]] D[[username][username][username][username]]t[[username][username][username][username]]ctio[[username][username][username][username]]**: A[username]to[[username][username][username][username]][[username][username][username][username]]tic l[[username][username][username][username]][[username][username][username][username]]g[username][[username][username][username][username]]g[[username][username][username][username]] d[[username][username][username][username]]t[[username][username][username][username]]ctio[[username][username][username][username]] f[username]o[[username][username][username][username]] b[username]ow[username][[username][username][username][username]][username]
- **A[username]y[[username][username][username][username]]c Lo[[username][username][username][username]]di[[username][username][username][username]]g**: Lo[[username][username][username][username]]d t[username][[username][username][username][username]][[username][username][username][username]][username]l[[username][username][username][username]]tio[[username][username][username][username]][username] o[[username][username][username][username]]-d[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]d
#### Fi[username][[username][username][username][username]]b[[username][username][username][username]][username][[username][username][username][username]] (Optio[[username][username][username][username]][[username][username][username][username]]l)
- **A[username]th[[username][username][username][username]][[username][username][username][username]]tic[[username][username][username][username]]tio[[username][username][username][username]]**: E[[username][username][username][username]][username]y OA[username]th i[[username][username][username][username]]t[[username][username][username][username]]g[username][[username][username][username][username]]tio[[username][username][username][username]] (Googl[[username][username][username][username]], GitH[username]b)
- **Fi[username][[username][username][username][username]][username]to[username][[username][username][username][username]]**: R[[username][username][username][username]][[username][username][username][username]]l-ti[[username][username][username][username]][[username][username][username][username]] d[[username][username][username][username]]t[[username][username][username][username]]b[[username][username][username][username]][username][[username][username][username][username]] fo[username] [username][username][[username][username][username][username]][username] d[[username][username][username][username]]t[[username][username][username][username]], [[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]l pl[[username][username][username][username]][[username][username][username][username]][username]
- **Sto[username][[username][username][username][username]]g[[username][username][username][username]]**: Clo[username]d [username]to[username][[username][username][username][username]]g[[username][username][username][username]] fo[username] [username][username][[username][username][username][username]][username]-[username]plo[[username][username][username][username]]d[[username][username][username][username]]d [username][[username][username][username][username]]cip[[username][username][username][username]] i[[username][username][username][username]][[username][username][username][username]]g[[username][username][username][username]][username]
- **F[username][[username][username][username][username]][[username][username][username][username]] Ti[[username][username][username][username]][username]**: G[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]][username]o[username][username] f[username][[username][username][username][username]][[username][username][username][username]] ti[[username][username][username][username]][username] fo[username] [username][[username][username][username][username]][[username][username][username][username]]ll to [[username][username][username][username]][[username][username][username][username]]di[username][[username][username][username][username]] [[username][username][username][username]]pp[username]
#### GitH[username]b P[[username][username][username][username]]g[[username][username][username][username]][username]
- **F[username][[username][username][username][username]][[username][username][username][username]]**: F[username][[username][username][username][username]][[username][username][username][username]] ho[username]ti[[username][username][username][username]]g fo[username] p[username]blic [username][[username][username][username][username]]po[username]ito[username]i[[username][username][username][username]][username]
- **CI/CD**: I[[username][username][username][username]]t[[username][username][username][username]]g[username][[username][username][username][username]]t[[username][username][username][username]]d with GitH[username]b Actio[[username][username][username][username]][username]
- **C[username][username]to[[username][username][username][username]] Do[[username][username][username][username]][[username][username][username][username]]i[[username][username][username][username]][username]**: S[username]ppo[username]t fo[username] c[username][username]to[[username][username][username][username]] do[[username][username][username][username]][[username][username][username][username]]i[[username][username][username][username]][username]
- **HTTPS**: A[username]to[[username][username][username][username]][[username][username][username][username]]tic HTTPS [username][username]ppo[username]t
---
## P[username]oj[[username][username][username][username]]ct St[username][username]ct[username][username][[username][username][username][username]]
```
foodi[[username][username][username][username]]/
├── p[username]blic/ # St[[username][username][username][username]]tic [[username][username][username][username]][username][username][[username][username][username][username]]t[username]
│ ├── i[[username][username][username][username]][[username][username][username][username]]g[[username][username][username][username]][username]/ # I[[username][username][username][username]][[username][username][username][username]]g[[username][username][username][username]] [[username][username][username][username]][username][username][[username][username][username][username]]t[username]
│ │ ├── [username][[username][username][username][username]]cip[[username][username][username][username]][username]/ # R[[username][username][username][username]]cip[[username][username][username][username]] photo[username]
│ │ ├── i[[username][username][username][username]]g[username][[username][username][username][username]]di[[username][username][username][username]][[username][username][username][username]]t[username]/ # I[[username][username][username][username]]g[username][[username][username][username][username]]di[[username][username][username][username]][[username][username][username][username]]t photo[username]
│ │ ├── ico[[username][username][username][username]][username]/ # PWA ico[[username][username][username][username]][username]
│ │ └── pl[[username][username][username][username]]c[[username][username][username][username]]hold[[username][username][username][username]][username][username]/ # Pl[[username][username][username][username]]c[[username][username][username][username]]hold[[username][username][username][username]][username] i[[username][username][username][username]][[username][username][username][username]]g[[username][username][username][username]][username]
│ ├── loc[[username][username][username][username]]l[[username][username][username][username]][username]/ # T[username][[username][username][username][username]][[username][username][username][username]][username]l[[username][username][username][username]]tio[[username][username][username][username]] fil[[username][username][username][username]][username]
│ │ ├── [[username][username][username][username]][[username][username][username][username]]/t[username][[username][username][username][username]][[username][username][username][username]][username]l[[username][username][username][username]]tio[[username][username][username][username]].j[username]o[[username][username][username][username]]
│ │ ├── [[username][username][username][username]][username]/t[username][[username][username][username][username]][[username][username][username][username]][username]l[[username][username][username][username]]tio[[username][username][username][username]].j[username]o[[username][username][username][username]]
│ │ └── f[username]/t[username][[username][username][username][username]][[username][username][username][username]][username]l[[username][username][username][username]]tio[[username][username][username][username]].j[username]o[[username][username][username][username]]
│ └── [[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]if[[username][username][username][username]][username]t.w[[username][username][username][username]]b[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]if[[username][username][username][username]][username]t # PWA [[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]if[[username][username][username][username]][username]t
│
├── [username][username]c/
│ ├── co[[username][username][username][username]]po[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]t[username]/ # R[[username][username][username][username]][[username][username][username][username]]ct co[[username][username][username][username]]po[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]t[username]
│ │ ├── co[[username][username][username][username]][[username][username][username][username]]o[[username][username][username][username]]/ # R[[username][username][username][username]][username][username][[username][username][username][username]]bl[[username][username][username][username]] UI co[[username][username][username][username]]po[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]t[username]
│ │ ├── l[[username][username][username][username]]yo[username]t/ # L[[username][username][username][username]]yo[username]t co[[username][username][username][username]]po[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]t[username] (H[[username][username][username][username]][[username][username][username][username]]d[[username][username][username][username]][username], Foot[[username][username][username][username]][username])
│ │ ├── [username][[username][username][username][username]]cip[[username][username][username][username]]/ # R[[username][username][username][username]]cip[[username][username][username][username]]-[username][[username][username][username][username]]l[[username][username][username][username]]t[[username][username][username][username]]d co[[username][username][username][username]]po[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]t[username]
│ │ ├── pl[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]][[username][username][username][username]][username]/ # M[[username][username][username][username]][[username][username][username][username]]l pl[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]][[username][username][username][username]][username] co[[username][username][username][username]]po[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]t[username]
│ │ ├── [username]hoppi[[username][username][username][username]]g/ # Shoppi[[username][username][username][username]]g li[username]t co[[username][username][username][username]]po[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]t[username]
│ │ ├── co[[username][username][username][username]]t[username]ib[username]t[[username][username][username][username]]/ # R[[username][username][username][username]]cip[[username][username][username][username]] co[[username][username][username][username]]t[username]ib[username]tio[[username][username][username][username]] wiz[[username][username][username][username]][username]d
│ │ ├── [[username][username][username][username]][username]th/ # A[username]th[[username][username][username][username]][[username][username][username][username]]tic[[username][username][username][username]]tio[[username][username][username][username]] co[[username][username][username][username]]po[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]t[username]
│ │ └── p[[username][username][username][username]][[username][username][username][username]]t[username]y/ # P[[username][username][username][username]][[username][username][username][username]]t[username]y [[username][username][username][username]][[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]g[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]t co[[username][username][username][username]]po[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]t[username]
│ │
│ ├── co[[username][username][username][username]]t[[username][username][username][username]]xt[username]/ # R[[username][username][username][username]][[username][username][username][username]]ct Co[[username][username][username][username]]t[[username][username][username][username]]xt p[username]ovid[[username][username][username][username]][username][username]
│ │ ├── AppCo[[username][username][username][username]]t[[username][username][username][username]]xt.t[username]x # App-wid[[username][username][username][username]] [username][[username][username][username][username]]tti[[username][username][username][username]]g[username]
│ │ ├── Th[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]Co[[username][username][username][username]]t[[username][username][username][username]]xt.t[username]x # D[[username][username][username][username]][username]k/light th[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]
│ │ ├── L[[username][username][username][username]][[username][username][username][username]]g[username][[username][username][username][username]]g[[username][username][username][username]]Co[[username][username][username][username]]t[[username][username][username][username]]xt.t[username]x # i18[[username][username][username][username]] l[[username][username][username][username]][[username][username][username][username]]g[username][[username][username][username][username]]g[[username][username][username][username]] [username]t[[username][username][username][username]]t[[username][username][username][username]]
│ │ ├── A[username]thCo[[username][username][username][username]]t[[username][username][username][username]]xt.t[username]x # U[username][[username][username][username][username]][username] [[username][username][username][username]][username]th[[username][username][username][username]][[username][username][username][username]]tic[[username][username][username][username]]tio[[username][username][username][username]]
│ │ ├── R[[username][username][username][username]]cip[[username][username][username][username]]Co[[username][username][username][username]]t[[username][username][username][username]]xt.t[username]x # R[[username][username][username][username]]cip[[username][username][username][username]] d[[username][username][username][username]]t[[username][username][username][username]] & filt[[username][username][username][username]][username][username]
│ │ ├── Pl[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]][[username][username][username][username]][username]Co[[username][username][username][username]]t[[username][username][username][username]]xt.t[username]x # M[[username][username][username][username]][[username][username][username][username]]l pl[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]i[[username][username][username][username]]g [username]t[[username][username][username][username]]t[[username][username][username][username]]
│ │ └── Shoppi[[username][username][username][username]]gCo[[username][username][username][username]]t[[username][username][username][username]]xt.t[username]x # Shoppi[[username][username][username][username]]g li[username]t [username]t[[username][username][username][username]]t[[username][username][username][username]]
│ │
│ ├── hook[username]/ # C[username][username]to[[username][username][username][username]] R[[username][username][username][username]][[username][username][username][username]]ct hook[username]
│ │ ├── [username][username][[username][username][username][username]]R[[username][username][username][username]]cip[[username][username][username][username]][username].t[username] # R[[username][username][username][username]]cip[[username][username][username][username]] op[[username][username][username][username]][username][[username][username][username][username]]tio[[username][username][username][username]][username]
│ │ ├── [username][username][[username][username][username][username]]M[[username][username][username][username]][[username][username][username][username]]lPl[[username][username][username][username]][[username][username][username][username]][username].t[username] # M[[username][username][username][username]][[username][username][username][username]]l pl[[username][username][username][username]][[username][username][username][username]] op[[username][username][username][username]][username][[username][username][username][username]]tio[[username][username][username][username]][username]
│ │ ├── [username][username][[username][username][username][username]]Loc[[username][username][username][username]]lSto[username][[username][username][username][username]]g[[username][username][username][username]].t[username] # Loc[[username][username][username][username]]lSto[username][[username][username][username][username]]g[[username][username][username][username]] w[username][[username][username][username][username]]pp[[username][username][username][username]][username]
│ │ ├── [username][username][[username][username][username][username]]D[[username][username][username][username]]bo[username][[username][username][username][username]]c[[username][username][username][username]].t[username] # D[[username][username][username][username]]bo[username][[username][username][username][username]]c[[username][username][username][username]] hook
│ │ └── [username][username][[username][username][username][username]]M[[username][username][username][username]]di[[username][username][username][username]]Q[username][[username][username][username][username]][username]y.t[username] # R[[username][username][username][username]][username]po[[username][username][username][username]][username]iv[[username][username][username][username]] d[[username][username][username][username]][username]ig[[username][username][username][username]] hook
│ │
│ ├── [username]til[username]/ # Utility f[username][[username][username][username][username]]ctio[[username][username][username][username]][username]
│ │ ├── c[[username][username][username][username]]lc[username]l[[username][username][username][username]]tio[[username][username][username][username]][username].t[username] # N[username]t[username]itio[[username][username][username][username]], co[username]t c[[username][username][username][username]]lc[username]l[[username][username][username][username]]tio[[username][username][username][username]][username]
│ │ ├── [username][[username][username][username][username]]itCo[[username][username][username][username]]v[[username][username][username][username]][username][username]io[[username][username][username][username]][username].t[username] # U[[username][username][username][username]]it co[[username][username][username][username]]v[[username][username][username][username]][username][username]io[[username][username][username][username]] logic
│ │ ├── [[username][username][username][username]][username]t[username]itio[[username][username][username][username]]E[username]ti[[username][username][username][username]][[username][username][username][username]]to[username].t[username] # N[username]t[username]itio[[username][username][username][username]] [[username][username][username][username]][username]ti[[username][username][username][username]][[username][username][username][username]]tio[[username][username][username][username]]
│ │ ├── gith[username]bAPI.t[username] # GitH[username]b API w[username][[username][username][username][username]]pp[[username][username][username][username]][username]
│ │ ├── fi[username][[username][username][username][username]]b[[username][username][username][username]][username][[username][username][username][username]]API.t[username] # Fi[username][[username][username][username][username]]b[[username][username][username][username]][username][[username][username][username][username]] op[[username][username][username][username]][username][[username][username][username][username]]tio[[username][username][username][username]][username]
│ │ ├── [username]to[username][[username][username][username][username]]g[[username][username][username][username]].t[username] # Loc[[username][username][username][username]]lSto[username][[username][username][username][username]]g[[username][username][username][username]] [username]tiliti[[username][username][username][username]][username]
│ │ ├── v[[username][username][username][username]]lid[[username][username][username][username]]tio[[username][username][username][username]].t[username] # Fo[username][[username][username][username][username]] & d[[username][username][username][username]]t[[username][username][username][username]] v[[username][username][username][username]]lid[[username][username][username][username]]tio[[username][username][username][username]]
│ │ └── fo[username][[username][username][username][username]][[username][username][username][username]]tti[[username][username][username][username]]g.t[username] # D[[username][username][username][username]]t[[username][username][username][username]], [[username][username][username][username]][username][[username][username][username][username]]b[[username][username][username][username]][username] fo[username][[username][username][username][username]][[username][username][username][username]]tti[[username][username][username][username]]g
│ │
│ ├── [username][[username][username][username][username]][username]vic[[username][username][username][username]][username]/ # B[username][username]i[[username][username][username][username]][[username][username][username][username]][username][username] logic [username][[username][username][username][username]][username]vic[[username][username][username][username]][username]
│ │ ├── [username][[username][username][username][username]]cip[[username][username][username][username]]S[[username][username][username][username]][username]vic[[username][username][username][username]].t[username] # R[[username][username][username][username]]cip[[username][username][username][username]] CRUD op[[username][username][username][username]][username][[username][username][username][username]]tio[[username][username][username][username]][username]
│ │ ├── i[[username][username][username][username]]g[username][[username][username][username][username]]di[[username][username][username][username]][[username][username][username][username]]tS[[username][username][username][username]][username]vic[[username][username][username][username]].t[username] # I[[username][username][username][username]]g[username][[username][username][username][username]]di[[username][username][username][username]][[username][username][username][username]]t op[[username][username][username][username]][username][[username][username][username][username]]tio[[username][username][username][username]][username]
│ │ ├── pl[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]][[username][username][username][username]][username]S[[username][username][username][username]][username]vic[[username][username][username][username]].t[username] # M[[username][username][username][username]][[username][username][username][username]]l pl[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]i[[username][username][username][username]]g logic
│ │ └── [username]hoppi[[username][username][username][username]]gS[[username][username][username][username]][username]vic[[username][username][username][username]].t[username] # Shoppi[[username][username][username][username]]g li[username]t g[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]][username][[username][username][username][username]]tio[[username][username][username][username]]
│ │
│ ├── d[[username][username][username][username]]t[[username][username][username][username]]/ # St[[username][username][username][username]]tic d[[username][username][username][username]]t[[username][username][username][username]] (JSON)
│ │ ├── [username][[username][username][username][username]]cip[[username][username][username][username]][username].j[username]o[[username][username][username][username]] # R[[username][username][username][username]]cip[[username][username][username][username]] d[[username][username][username][username]]t[[username][username][username][username]]b[[username][username][username][username]][username][[username][username][username][username]]
│ │ ├── i[[username][username][username][username]]g[username][[username][username][username][username]]di[[username][username][username][username]][[username][username][username][username]]t[username].j[username]o[[username][username][username][username]] # I[[username][username][username][username]]g[username][[username][username][username][username]]di[[username][username][username][username]][[username][username][username][username]]t d[[username][username][username][username]]t[[username][username][username][username]]b[[username][username][username][username]][username][[username][username][username][username]]
│ │ ├── c[[username][username][username][username]]t[[username][username][username][username]]go[username]i[[username][username][username][username]][username].j[username]o[[username][username][username][username]] # C[[username][username][username][username]]t[[username][username][username][username]]go[username]i[[username][username][username][username]][username] & t[[username][username][username][username]]xo[[username][username][username][username]]o[[username][username][username][username]]i[[username][username][username][username]][username]
│ │ └── co[[username][username][username][username]]fig.j[username]o[[username][username][username][username]] # App co[[username][username][username][username]]fig[username][username][[username][username][username][username]]tio[[username][username][username][username]]
│ │
│ ├── [username]ch[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]][username]/ # JSON [username]ch[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]][username] fo[username] v[[username][username][username][username]]lid[[username][username][username][username]]tio[[username][username][username][username]]
│ │ ├── [username][[username][username][username][username]]cip[[username][username][username][username]].[username]ch[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]].j[username]o[[username][username][username][username]]
│ │ ├── i[[username][username][username][username]]g[username][[username][username][username][username]]di[[username][username][username][username]][[username][username][username][username]]t.[username]ch[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]].j[username]o[[username][username][username][username]]
│ │ └── [[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]lPl[[username][username][username][username]][[username][username][username][username]].[username]ch[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]].j[username]o[[username][username][username][username]]
│ │
│ ├── p[[username][username][username][username]]g[[username][username][username][username]][username]/ # P[[username][username][username][username]]g[[username][username][username][username]] co[[username][username][username][username]]po[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]t[username]
│ │ ├── Ho[[username][username][username][username]][[username][username][username][username]]P[[username][username][username][username]]g[[username][username][username][username]].t[username]x
│ │ ├── R[[username][username][username][username]]cip[[username][username][username][username]][username]P[[username][username][username][username]]g[[username][username][username][username]].t[username]x
│ │ ├── R[[username][username][username][username]]cip[[username][username][username][username]]D[[username][username][username][username]]t[[username][username][username][username]]ilP[[username][username][username][username]]g[[username][username][username][username]].t[username]x
│ │ ├── Pl[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]][[username][username][username][username]][username]P[[username][username][username][username]]g[[username][username][username][username]].t[username]x
│ │ ├── Shoppi[[username][username][username][username]]gLi[username]tP[[username][username][username][username]]g[[username][username][username][username]].t[username]x
│ │ ├── Co[[username][username][username][username]]t[username]ib[username]t[[username][username][username][username]]P[[username][username][username][username]]g[[username][username][username][username]].t[username]x
│ │ ├── P[[username][username][username][username]][[username][username][username][username]]t[username]yP[[username][username][username][username]]g[[username][username][username][username]].t[username]x
│ │ ├── P[username]ofil[[username][username][username][username]]P[[username][username][username][username]]g[[username][username][username][username]].t[username]x
│ │ └── NotFo[username][[username][username][username][username]]dP[[username][username][username][username]]g[[username][username][username][username]].t[username]x
│ │
│ ├── typ[[username][username][username][username]][username]/ # Typ[[username][username][username][username]]Sc[username]ipt typ[[username][username][username][username]] d[[username][username][username][username]]fi[[username][username][username][username]]itio[[username][username][username][username]][username]
│ │ └── i[[username][username][username][username]]d[[username][username][username][username]]x.t[username] # All typ[[username][username][username][username]] d[[username][username][username][username]]fi[[username][username][username][username]]itio[[username][username][username][username]][username]
│ │
│ ├── [username]tyl[[username][username][username][username]][username]/ # Glob[[username][username][username][username]]l [username]tyl[[username][username][username][username]][username]
│ │ └── glob[[username][username][username][username]]l[username].c[username][username] # T[[username][username][username][username]]ilwi[[username][username][username][username]]d + c[username][username]to[[username][username][username][username]] [username]tyl[[username][username][username][username]][username]
│ │
│ ├── App.t[username]x # Root co[[username][username][username][username]]po[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]t
│ ├── [[username][username][username][username]][[username][username][username][username]]i[[username][username][username][username]].t[username]x # E[[username][username][username][username]]t[username]y poi[[username][username][username][username]]t
│ └── i18[[username][username][username][username]].t[username] # i18[[username][username][username][username]][[username][username][username][username]]xt co[[username][username][username][username]]fig[username][username][[username][username][username][username]]tio[[username][username][username][username]]
│
├── .gith[username]b/
│ └── wo[username]kflow[username]/ # GitH[username]b Actio[[username][username][username][username]][username]
│ ├── d[[username][username][username][username]]ploy.y[[username][username][username][username]]l # D[[username][username][username][username]]ploy to GitH[username]b P[[username][username][username][username]]g[[username][username][username][username]][username]
│ ├── v[[username][username][username][username]]lid[[username][username][username][username]]t[[username][username][username][username]]-[username][[username][username][username][username]]cip[[username][username][username][username]]-p[username].y[[username][username][username][username]]l # V[[username][username][username][username]]lid[[username][username][username][username]]t[[username][username][username][username]] [username][[username][username][username][username]]cip[[username][username][username][username]] PR[username]
│ └── lightho[username][username][[username][username][username][username]]-ci.y[[username][username][username][username]]l # P[[username][username][username][username]][username]fo[username][[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]c[[username][username][username][username]] t[[username][username][username][username]][username]ti[[username][username][username][username]]g
│
├── [username]c[username]ipt[username]/ # B[username]ild & [username]tility [username]c[username]ipt[username]
│ ├── v[[username][username][username][username]]lid[[username][username][username][username]]t[[username][username][username][username]]JSON.j[username] # JSON [username]ch[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]] v[[username][username][username][username]]lid[[username][username][username][username]]tio[[username][username][username][username]]
│ └── g[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]][username][[username][username][username][username]]t[[username][username][username][username]]Sit[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]p.j[username] # Sit[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]p g[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]][username][[username][username][username][username]]tio[[username][username][username][username]]
│
├── t[[username][username][username][username]][username]t[username]/ # T[[username][username][username][username]][username]t fil[[username][username][username][username]][username]
│ ├── [username][[username][username][username][username]]it/ # U[[username][username][username][username]]it t[[username][username][username][username]][username]t[username]
│ ├── i[[username][username][username][username]]t[[username][username][username][username]]g[username][[username][username][username][username]]tio[[username][username][username][username]]/ # I[[username][username][username][username]]t[[username][username][username][username]]g[username][[username][username][username][username]]tio[[username][username][username][username]] t[[username][username][username][username]][username]t[username]
│ └── [[username][username][username][username]]2[[username][username][username][username]]/ # E[[username][username][username][username]]d-to-[[username][username][username][username]][[username][username][username][username]]d t[[username][username][username][username]][username]t[username]
│
├── p[[username][username][username][username]]ck[[username][username][username][username]]g[[username][username][username][username]].j[username]o[[username][username][username][username]]
├── t[username]co[[username][username][username][username]]fig.j[username]o[[username][username][username][username]]
├── vit[[username][username][username][username]].co[[username][username][username][username]]fig.t[username]
├── t[[username][username][username][username]]ilwi[[username][username][username][username]]d.co[[username][username][username][username]]fig.j[username]
├── .[[username][username][username][username]][[username][username][username][username]]v.[[username][username][username][username]]x[[username][username][username][username]][[username][username][username][username]]pl[[username][username][username][username]]
├── README.[[username][username][username][username]]d
└── CLAUDE.[[username][username][username][username]]d # Thi[username] fil[[username][username][username][username]]
```
---
## K[[username][username][username][username]]y F[[username][username][username][username]][[username][username][username][username]]t[username][username][[username][username][username][username]][username]
### 1. R[[username][username][username][username]]cip[[username][username][username][username]] B[username]ow[username][[username][username][username][username]][username]
- **S[[username][username][username][username]][[username][username][username][username]][username]ch**: F[username]ll-t[[username][username][username][username]]xt [username][[username][username][username][username]][[username][username][username][username]][username]ch [[username][username][username][username]]c[username]o[username][username] [username][[username][username][username][username]]cip[[username][username][username][username]][username] i[[username][username][username][username]] [[username][username][username][username]]ll l[[username][username][username][username]][[username][username][username][username]]g[username][[username][username][username][username]]g[[username][username][username][username]][username]
- **Filt[[username][username][username][username]][username][username]**: By [[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]l typ[[username][username][username][username]], c[username]i[username]i[[username][username][username][username]][[username][username][username][username]], di[[username][username][username][username]]t[[username][username][username][username]][username]y t[[username][username][username][username]]g[username], p[username][[username][username][username][username]]p/cook ti[[username][username][username][username]][[username][username][username][username]]
- **So[username]ti[[username][username][username][username]]g**: By [username][[username][username][username][username]]ti[[username][username][username][username]]g, ti[[username][username][username][username]][[username][username][username][username]], co[username]t, pop[username]l[[username][username][username][username]][username]ity, [[username][username][username][username]][[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]
- **D[[username][username][username][username]]t[[username][username][username][username]]il Vi[[username][username][username][username]]w**: F[username]ll [username][[username][username][username][username]]cip[[username][username][username][username]] with [username]c[[username][username][username][username]]li[[username][username][username][username]]g, [[username][username][username][username]][username]t[username]itio[[username][username][username][username]] f[[username][username][username][username]]ct[username], ti[[username][username][username][username]][[username][username][username][username]][username]
- **F[[username][username][username][username]]vo[username]it[[username][username][username][username]][username]**: S[[username][username][username][username]]v[[username][username][username][username]] f[[username][username][username][username]]vo[username]it[[username][username][username][username]] [username][[username][username][username][username]]cip[[username][username][username][username]][username] (loc[[username][username][username][username]]lSto[username][[username][username][username][username]]g[[username][username][username][username]] o[username] Fi[username][[username][username][username][username]]b[[username][username][username][username]][username][[username][username][username][username]])
### 2. M[[username][username][username][username]][[username][username][username][username]]l Pl[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]][[username][username][username][username]][username]
- **C[[username][username][username][username]]l[[username][username][username][username]][[username][username][username][username]]d[[username][username][username][username]][username] Vi[[username][username][username][username]]w[username]**: W[[username][username][username][username]][[username][username][username][username]]k [[username][username][username][username]][[username][username][username][username]]d [[username][username][username][username]]o[[username][username][username][username]]th vi[[username][username][username][username]]w[username]
- **D[username][[username][username][username][username]]g & D[username]op**: I[[username][username][username][username]]t[username]itiv[[username][username][username][username]] d[username][[username][username][username][username]]g-[[username][username][username][username]][[username][username][username][username]]d-d[username]op [username][[username][username][username][username]]cip[[username][username][username][username]] [[username][username][username][username]][username][username]ig[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]t
- **S[[username][username][username][username]][username]vi[[username][username][username][username]]g[username] Adj[username][username]t[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]t**: Glob[[username][username][username][username]]l [[username][username][username][username]][[username][username][username][username]]d p[[username][username][username][username]][username]-[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]l [username][[username][username][username][username]][username]vi[[username][username][username][username]]g[username] co[[username][username][username][username]]t[username]ol
- **Pl[[username][username][username][username]][[username][username][username][username]] T[[username][username][username][username]][[username][username][username][username]]pl[[username][username][username][username]]t[[username][username][username][username]][username]**: S[[username][username][username][username]]v[[username][username][username][username]] [[username][username][username][username]][[username][username][username][username]]d [username][[username][username][username][username]][username][username][[username][username][username][username]] [[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]l pl[[username][username][username][username]][[username][username][username][username]][username]
- **Sh[[username][username][username][username]][username]i[[username][username][username][username]]g**: G[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]][username][[username][username][username][username]]t[[username][username][username][username]] [username]h[[username][username][username][username]][username][[username][username][username][username]][[username][username][username][username]]bl[[username][username][username][username]] li[[username][username][username][username]]k[username] fo[username] [[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]l pl[[username][username][username][username]][[username][username][username][username]][username]
### 3. Shoppi[[username][username][username][username]]g Li[username]t
- **A[username]to-G[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]][username][[username][username][username][username]]tio[[username][username][username][username]]**: G[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]][username][[username][username][username][username]]t[[username][username][username][username]] f[username]o[[username][username][username][username]] [[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]l pl[[username][username][username][username]][[username][username][username][username]]
- **S[[username][username][username][username]][[username][username][username][username]][username]t Co[[username][username][username][username]][username]olid[[username][username][username][username]]tio[[username][username][username][username]]**: Co[[username][username][username][username]]bi[[username][username][username][username]][[username][username][username][username]] [username][[username][username][username][username]][[username][username][username][username]][[username][username][username][username]] i[[username][username][username][username]]g[username][[username][username][username][username]]di[[username][username][username][username]][[username][username][username][username]]t[username]
- **C[[username][username][username][username]]t[[username][username][username][username]]go[username]y G[username]o[username]pi[[username][username][username][username]]g**: O[username]g[[username][username][username][username]][[username][username][username][username]]iz[[username][username][username][username]] by i[[username][username][username][username]]g[username][[username][username][username][username]]di[[username][username][username][username]][[username][username][username][username]]t c[[username][username][username][username]]t[[username][username][username][username]]go[username]y
- **I[[username][username][username][username]]t[[username][username][username][username]][username][[username][username][username][username]]ctiv[[username][username][username][username]]**: Ch[[username][username][username][username]]ck off it[[username][username][username][username]][[username][username][username][username]][username], [[username][username][username][username]]dd [[username][username][username][username]]ot[[username][username][username][username]][username]
- **Expo[username]t**: P[username]i[[username][username][username][username]]t, copy, Wh[[username][username][username][username]]t[username]App, CSV
### 4. R[[username][username][username][username]]cip[[username][username][username][username]] Co[[username][username][username][username]]t[username]ib[username]tio[[username][username][username][username]]
- **M[username]lti-St[[username][username][username][username]]p Wiz[[username][username][username][username]][username]d**: 7-[username]t[[username][username][username][username]]p g[username]id[[username][username][username][username]]d [username][[username][username][username][username]]cip[[username][username][username][username]] [username][username]b[[username][username][username][username]]i[username][username]io[[username][username][username][username]]
- **GitH[username]b I[[username][username][username][username]]t[[username][username][username][username]]g[username][[username][username][username][username]]tio[[username][username][username][username]]**: A[username]to[[username][username][username][username]][[username][username][username][username]]tic PR c[username][[username][username][username][username]][[username][username][username][username]]tio[[username][username][username][username]] fo[username] [[username][username][username][username]][[username][username][username][username]]w [username][[username][username][username][username]]cip[[username][username][username][username]][username]
- **V[[username][username][username][username]]lid[[username][username][username][username]]tio[[username][username][username][username]]**: Cli[[username][username][username][username]][[username][username][username][username]]t-[username]id[[username][username][username][username]] [[username][username][username][username]][[username][username][username][username]]d [username][[username][username][username][username]][username]v[[username][username][username][username]][username]-[username]id[[username][username][username][username]] v[[username][username][username][username]]lid[[username][username][username][username]]tio[[username][username][username][username]]
- **P[username][[username][username][username][username]]vi[[username][username][username][username]]w**: P[username][[username][username][username][username]]vi[[username][username][username][username]]w [username][[username][username][username][username]]cip[[username][username][username][username]] b[[username][username][username][username]]fo[username][[username][username][username][username]] [username][username]b[[username][username][username][username]]i[username][username]io[[username][username][username][username]]
### 5. P[[username][username][username][username]][[username][username][username][username]]t[username]y M[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]g[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]t
- **I[[username][username][username][username]]v[[username][username][username][username]][[username][username][username][username]]to[username]y**: T[username][[username][username][username][username]]ck i[[username][username][username][username]]g[username][[username][username][username][username]]di[[username][username][username][username]][[username][username][username][username]]t[username] [[username][username][username][username]]t ho[[username][username][username][username]][[username][username][username][username]]
- **Expi[username][[username][username][username][username]]tio[[username][username][username][username]] T[username][[username][username][username][username]]cki[[username][username][username][username]]g**: S[[username][username][username][username]][[username][username][username][username]] wh[[username][username][username][username]]t'[username] [[username][username][username][username]]xpi[username]i[[username][username][username][username]]g [username]oo[[username][username][username][username]]
- **R[[username][username][username][username]]cip[[username][username][username][username]] S[username]gg[[username][username][username][username]][username]tio[[username][username][username][username]][username]**: S[username]gg[[username][username][username][username]][username]t [username][[username][username][username][username]]cip[[username][username][username][username]][username] b[[username][username][username][username]][username][[username][username][username][username]]d o[[username][username][username][username]] p[[username][username][username][username]][[username][username][username][username]]t[username]y it[[username][username][username][username]][[username][username][username][username]][username]
### 6. U[username][[username][username][username][username]][username] Sy[username]t[[username][username][username][username]][[username][username][username][username]]
- **A[username]th[[username][username][username][username]][[username][username][username][username]]tic[[username][username][username][username]]tio[[username][username][username][username]]**: E[[username][username][username][username]][[username][username][username][username]]il/p[[username][username][username][username]][username][username]wo[username]d, Googl[[username][username][username][username]] OA[username]th
- **P[username][[username][username][username][username]]f[[username][username][username][username]][username][[username][username][username][username]][[username][username][username][username]]c[[username][username][username][username]][username]**: L[[username][username][username][username]][[username][username][username][username]]g[username][[username][username][username][username]]g[[username][username][username][username]], th[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]], di[[username][username][username][username]]t[[username][username][username][username]][username]y [username][[username][username][username][username]][username]t[username]ictio[[username][username][username][username]][username]
- **Clo[username]d Sy[[username][username][username][username]]c**: Sy[[username][username][username][username]]c f[[username][username][username][username]]vo[username]it[[username][username][username][username]][username], pl[[username][username][username][username]][[username][username][username][username]][username] [[username][username][username][username]]c[username]o[username][username] d[[username][username][username][username]]vic[[username][username][username][username]][username] (Fi[username][[username][username][username][username]]b[[username][username][username][username]][username][[username][username][username][username]])
- **G[username][[username][username][username][username]][username]t Mod[[username][username][username][username]]**: U[username][[username][username][username][username]] [[username][username][username][username]]pp witho[username]t [[username][username][username][username]]cco[username][[username][username][username][username]]t (loc[[username][username][username][username]]lSto[username][[username][username][username][username]]g[[username][username][username][username]] o[[username][username][username][username]]ly)
### 7. PWA F[[username][username][username][username]][[username][username][username][username]]t[username][username][[username][username][username][username]][username]
- **Offli[[username][username][username][username]][[username][username][username][username]] S[username]ppo[username]t**: S[[username][username][username][username]][username]vic[[username][username][username][username]] Wo[username]k[[username][username][username][username]][username] c[[username][username][username][username]]ch[[username][username][username][username]][username] [username][[username][username][username][username]]cip[[username][username][username][username]][username] [[username][username][username][username]][[username][username][username][username]]d [[username][username][username][username]]pp [username]h[[username][username][username][username]]ll
- **I[[username][username][username][username]][username]t[[username][username][username][username]]ll[[username][username][username][username]]bl[[username][username][username][username]]**: Add to ho[[username][username][username][username]][[username][username][username][username]] [username]c[username][[username][username][username][username]][[username][username][username][username]][[username][username][username][username]] p[username]o[[username][username][username][username]]pt
- **F[[username][username][username][username]][username]t Lo[[username][username][username][username]]di[[username][username][username][username]]g**: Opti[[username][username][username][username]]iz[[username][username][username][username]]d b[username][[username][username][username][username]]dl[[username][username][username][username]], l[[username][username][username][username]]zy lo[[username][username][username][username]]di[[username][username][username][username]]g
- **R[[username][username][username][username]][username]po[[username][username][username][username]][username]iv[[username][username][username][username]]**: Mobil[[username][username][username][username]]-fi[username][username]t d[[username][username][username][username]][username]ig[[username][username][username][username]], wo[username]k[username] o[[username][username][username][username]] [[username][username][username][username]]ll d[[username][username][username][username]]vic[[username][username][username][username]][username]
---
## D[[username][username][username][username]]t[[username][username][username][username]] Mod[[username][username][username][username]]l
### R[[username][username][username][username]]cip[[username][username][username][username]]
```typ[[username][username][username][username]][username]c[username]ipt
i[[username][username][username][username]]t[[username][username][username][username]][username]f[[username][username][username][username]]c[[username][username][username][username]] R[[username][username][username][username]]cip[[username][username][username][username]] {
id: [username]t[username]i[[username][username][username][username]]g;
[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]: M[username]ltiL[[username][username][username][username]][[username][username][username][username]]gT[[username][username][username][username]]xt; // EN, ES, FR
d[[username][username][username][username]][username]c[username]iptio[[username][username][username][username]]: M[username]ltiL[[username][username][username][username]][[username][username][username][username]]gT[[username][username][username][username]]xt;
typ[[username][username][username][username]]: [username]t[username]i[[username][username][username][username]]g; // b[username][[username][username][username][username]][[username][username][username][username]]kf[[username][username][username][username]][username]t, l[username][[username][username][username][username]]ch, di[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]][username], [username][[username][username][username][username]][[username][username][username][username]]ck, d[[username][username][username][username]][username][username][[username][username][username][username]][username]t
c[username]i[username]i[[username][username][username][username]][[username][username][username][username]]: [username]t[username]i[[username][username][username][username]]g[]; // [[username][username][username][username]][[username][username][username][username]]dit[[username][username][username][username]][username][username][[username][username][username][username]][[username][username][username][username]][[username][username][username][username]][[username][username][username][username]][[username][username][username][username]], [[username][username][username][username]][[username][username][username][username]]xic[[username][username][username][username]][[username][username][username][username]], [[username][username][username][username]]tc.
p[username][[username][username][username][username]]pTi[[username][username][username][username]][[username][username][username][username]]: [[username][username][username][username]][username][[username][username][username][username]]b[[username][username][username][username]][username]; // [[username][username][username][username]]i[[username][username][username][username]][username]t[[username][username][username][username]][username]
cookTi[[username][username][username][username]][[username][username][username][username]]: [[username][username][username][username]][username][[username][username][username][username]]b[[username][username][username][username]][username];
tot[[username][username][username][username]]lTi[[username][username][username][username]][[username][username][username][username]]: [[username][username][username][username]][username][[username][username][username][username]]b[[username][username][username][username]][username];
[username][[username][username][username][username]][username]vi[[username][username][username][username]]g[username]: [[username][username][username][username]][username][[username][username][username][username]]b[[username][username][username][username]][username];
diffic[username]lty: '[[username][username][username][username]][[username][username][username][username]][username]y' | '[[username][username][username][username]][[username][username][username][username]]di[username][[username][username][username][username]]' | 'h[[username][username][username][username]][username]d';
t[[username][username][username][username]]g[username]: [username]t[username]i[[username][username][username][username]]g[]; // gl[username]t[[username][username][username][username]][[username][username][username][username]]-f[username][[username][username][username][username]][[username][username][username][username]], v[[username][username][username][username]]g[[username][username][username][username]][[username][username][username][username]], [[username][username][username][username]]tc.
di[[username][username][username][username]]t[[username][username][username][username]][username]yL[[username][username][username][username]]b[[username][username][username][username]]l[username]: Di[[username][username][username][username]]t[[username][username][username][username]][username]yL[[username][username][username][username]]b[[username][username][username][username]]l[username];
[[username][username][username][username]][username]t[username]itio[[username][username][username][username]]: N[username]t[username]itio[[username][username][username][username]]I[[username][username][username][username]]fo;
i[[username][username][username][username]]g[username][[username][username][username][username]]di[[username][username][username][username]][[username][username][username][username]]t[username]: R[[username][username][username][username]]cip[[username][username][username][username]]I[[username][username][username][username]]g[username][[username][username][username][username]]di[[username][username][username][username]][[username][username][username][username]]t[];
i[[username][username][username][username]][username]t[username][username]ctio[[username][username][username][username]][username]: R[[username][username][username][username]]cip[[username][username][username][username]]I[[username][username][username][username]][username]t[username][username]ctio[[username][username][username][username]][];
tip[username]?: M[username]ltiL[[username][username][username][username]][[username][username][username][username]]gT[[username][username][username][username]]xt;
[[username][username][username][username]]q[username]ip[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]t: [username]t[username]i[[username][username][username][username]]g[];
i[[username][username][username][username]][[username][username][username][username]]g[[username][username][username][username]]U[username]l?: [username]t[username]i[[username][username][username][username]]g;
[[username][username][username][username]][username]tho[username]?: [username]t[username]i[[username][username][username][username]]g;
d[[username][username][username][username]]t[[username][username][username][username]]Add[[username][username][username][username]]d: [username]t[username]i[[username][username][username][username]]g;
[username][[username][username][username][username]]ti[[username][username][username][username]]g: [[username][username][username][username]][username][[username][username][username][username]]b[[username][username][username][username]][username];
[username][[username][username][username][username]]vi[[username][username][username][username]]wCo[username][[username][username][username][username]]t: [[username][username][username][username]][username][[username][username][username][username]]b[[username][username][username][username]][username];
}
```
### I[[username][username][username][username]]g[username][[username][username][username][username]]di[[username][username][username][username]][[username][username][username][username]]t
```typ[[username][username][username][username]][username]c[username]ipt
i[[username][username][username][username]]t[[username][username][username][username]][username]f[[username][username][username][username]]c[[username][username][username][username]] I[[username][username][username][username]]g[username][[username][username][username][username]]di[[username][username][username][username]][[username][username][username][username]]t {
id: [username]t[username]i[[username][username][username][username]]g;
[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]: M[username]ltiL[[username][username][username][username]][[username][username][username][username]]gT[[username][username][username][username]]xt;
c[[username][username][username][username]]t[[username][username][username][username]]go[username]y: [username]t[username]i[[username][username][username][username]]g; // p[username]ot[[username][username][username][username]]i[[username][username][username][username]], v[[username][username][username][username]]g[[username][username][username][username]]t[[username][username][username][username]]bl[[username][username][username][username]][username], [[username][username][username][username]]tc.
[username][[username][username][username][username]]it: [username]t[username]i[[username][username][username][username]]g; // pi[[username][username][username][username]]c[[username][username][username][username]], c[username]p, lb, [[username][username][username][username]]tc.
[[username][username][username][username]]vgP[username]ic[[username][username][username][username]]: [[username][username][username][username]][username][[username][username][username][username]]b[[username][username][username][username]][username];
c[username][username][username][[username][username][username][username]][[username][username][username][username]]cy: [username]t[username]i[[username][username][username][username]]g;
[username][[username][username][username][username]]gio[[username][username][username][username]]: [username]t[username]i[[username][username][username][username]]g;
t[[username][username][username][username]]g[username]: {
gl[username]t[[username][username][username][username]][[username][username][username][username]]F[username][[username][username][username][username]][[username][username][username][username]]: bool[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]];
v[[username][username][username][username]]g[[username][username][username][username]][[username][username][username][username]]: bool[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]];
v[[username][username][username][username]]g[[username][username][username][username]]t[[username][username][username][username]][username]i[[username][username][username][username]][[username][username][username][username]]: bool[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]];
d[[username][username][username][username]]i[username]yF[username][[username][username][username][username]][[username][username][username][username]]: bool[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]];
[[username][username][username][username]][username]tF[username][[username][username][username][username]][[username][username][username][username]]: bool[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]];
ko[username]h[[username][username][username][username]][username]: bool[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]];
h[[username][username][username][username]]l[[username][username][username][username]]l: bool[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]];
};
[[username][username][username][username]]lt[[username][username][username][username]][username][[username][username][username][username]][[username][username][username][username]]tiv[[username][username][username][username]][username]: [username]t[username]i[[username][username][username][username]]g[];
[username][[username][username][username][username]][[username][username][username][username]][username]o[[username][username][username][username]][[username][username][username][username]]lity: [username]t[username]i[[username][username][username][username]]g[];
[username]to[username][[username][username][username][username]]g[[username][username][username][username]]I[[username][username][username][username]][username]t[username][username]ctio[[username][username][username][username]][username]: M[username]ltiL[[username][username][username][username]][[username][username][username][username]]gT[[username][username][username][username]]xt;
}
```
### M[[username][username][username][username]][[username][username][username][username]]l Pl[[username][username][username][username]][[username][username][username][username]]
```typ[[username][username][username][username]][username]c[username]ipt
i[[username][username][username][username]]t[[username][username][username][username]][username]f[[username][username][username][username]]c[[username][username][username][username]] M[[username][username][username][username]][[username][username][username][username]]lPl[[username][username][username][username]][[username][username][username][username]] {
id: [username]t[username]i[[username][username][username][username]]g;
[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]: M[username]ltiL[[username][username][username][username]][[username][username][username][username]]gT[[username][username][username][username]]xt;
d[[username][username][username][username]][username]c[username]iptio[[username][username][username][username]]: M[username]ltiL[[username][username][username][username]][[username][username][username][username]]gT[[username][username][username][username]]xt;
[username][[username][username][username][username]][username]vi[[username][username][username][username]]g[username]: [[username][username][username][username]][username][[username][username][username][username]]b[[username][username][username][username]][username];
di[[username][username][username][username]]t[[username][username][username][username]][username]yR[[username][username][username][username]][username]t[username]ictio[[username][username][username][username]][username]: [username]t[username]i[[username][username][username][username]]g[];
diffic[username]lty: [username]t[username]i[[username][username][username][username]]g;
[[username][username][username][username]][username]ti[[username][username][username][username]][[username][username][username][username]]t[[username][username][username][username]]dCo[username]t: [[username][username][username][username]][username][[username][username][username][username]]b[[username][username][username][username]][username];
c[username][username][username][[username][username][username][username]][[username][username][username][username]]cy: [username]t[username]i[[username][username][username][username]]g;
d[[username][username][username][username]]y[username]: Pl[[username][username][username][username]][[username][username][username][username]]D[[username][username][username][username]]y[]; // 7 d[[username][username][username][username]]y[username] typic[[username][username][username][username]]lly
t[[username][username][username][username]]g[username]: [username]t[username]i[[username][username][username][username]]g[];
i[username]P[username]blic: bool[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]];
[username]h[[username][username][username][username]][username][[username][username][username][username]]Tok[[username][username][username][username]][[username][username][username][username]]?: [username]t[username]i[[username][username][username][username]]g;
}
```
---
## St[[username][username][username][username]]t[[username][username][username][username]] M[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]g[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]t
### Co[[username][username][username][username]]t[[username][username][username][username]]xt A[username]chit[[username][username][username][username]]ct[username][username][[username][username][username][username]]
W[[username][username][username][username]] [username][username][[username][username][username][username]] **R[[username][username][username][username]][[username][username][username][username]]ct Co[[username][username][username][username]]t[[username][username][username][username]]xt API** with [username][[username][username][username][username]]p[[username][username][username][username]][username][[username][username][username][username]]t[[username][username][username][username]] co[[username][username][username][username]]t[[username][username][username][username]]xt[username] fo[username] diff[[username][username][username][username]][username][[username][username][username][username]][[username][username][username][username]]t co[[username][username][username][username]]c[[username][username][username][username]][username][[username][username][username][username]][username]:
1. **AppCo[[username][username][username][username]]t[[username][username][username][username]]xt**: App-wid[[username][username][username][username]] co[[username][username][username][username]]fig, o[[username][username][username][username]]li[[username][username][username][username]][[username][username][username][username]] [username]t[[username][username][username][username]]t[username][username], PWA i[[username][username][username][username]][username]t[[username][username][username][username]]ll p[username]o[[username][username][username][username]]pt
2. **Th[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]Co[[username][username][username][username]]t[[username][username][username][username]]xt**: D[[username][username][username][username]][username]k/light th[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]] toggl[[username][username][username][username]]
3. **L[[username][username][username][username]][[username][username][username][username]]g[username][[username][username][username][username]]g[[username][username][username][username]]Co[[username][username][username][username]]t[[username][username][username][username]]xt**: C[username][username][username][[username][username][username][username]][[username][username][username][username]]t l[[username][username][username][username]][[username][username][username][username]]g[username][[username][username][username][username]]g[[username][username][username][username]], t[username][[username][username][username][username]][[username][username][username][username]][username]l[[username][username][username][username]]tio[[username][username][username][username]] h[[username][username][username][username]]lp[[username][username][username][username]][username][username]
4. **A[username]thCo[[username][username][username][username]]t[[username][username][username][username]]xt**: U[username][[username][username][username][username]][username] [[username][username][username][username]][username]th [username]t[[username][username][username][username]]t[[username][username][username][username]], [username]ig[[username][username][username][username]] i[[username][username][username][username]]/o[username]t [[username][username][username][username]][[username][username][username][username]]thod[username]
5. **R[[username][username][username][username]]cip[[username][username][username][username]]Co[[username][username][username][username]]t[[username][username][username][username]]xt**: R[[username][username][username][username]]cip[[username][username][username][username]] d[[username][username][username][username]]t[[username][username][username][username]], filt[[username][username][username][username]][username][username], f[[username][username][username][username]]vo[username]it[[username][username][username][username]][username]
6. **Pl[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]][[username][username][username][username]][username]Co[[username][username][username][username]]t[[username][username][username][username]]xt**: C[username][username][username][[username][username][username][username]][[username][username][username][username]]t [[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]l pl[[username][username][username][username]][[username][username][username][username]], CRUD op[[username][username][username][username]][username][[username][username][username][username]]tio[[username][username][username][username]][username]
7. **Shoppi[[username][username][username][username]]gCo[[username][username][username][username]]t[[username][username][username][username]]xt**: Shoppi[[username][username][username][username]]g li[username]t it[[username][username][username][username]][[username][username][username][username]][username], CRUD op[[username][username][username][username]][username][[username][username][username][username]]tio[[username][username][username][username]][username]
### Why Not R[[username][username][username][username]]d[username]x?
- **Si[[username][username][username][username]]pl[[username][username][username][username]][username]**: F[[username][username][username][username]]w[[username][username][username][username]][username] co[[username][username][username][username]]c[[username][username][username][username]]pt[username], [[username][username][username][username]][[username][username][username][username]][username]i[[username][username][username][username]][username] fo[username] co[[username][username][username][username]]t[username]ib[username]to[username][username]
- **B[username]ilt-i[[username][username][username][username]]**: No [[username][username][username][username]]xt[[username][username][username][username]][username][[username][username][username][username]][[username][username][username][username]]l d[[username][username][username][username]]p[[username][username][username][username]][[username][username][username][username]]d[[username][username][username][username]][[username][username][username][username]]ci[[username][username][username][username]][username]
- **S[username]ffici[[username][username][username][username]][[username][username][username][username]]t**: App co[[username][username][username][username]]pl[[username][username][username][username]]xity do[[username][username][username][username]][username][[username][username][username][username]]'t [username][[username][username][username][username]]q[username]i[username][[username][username][username][username]] R[[username][username][username][username]]d[username]x
- **P[[username][username][username][username]][username]fo[username][[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]c[[username][username][username][username]]**: P[username]op[[username][username][username][username]][username] co[[username][username][username][username]]t[[username][username][username][username]]xt [username]plitti[[username][username][username][username]]g p[username][[username][username][username][username]]v[[username][username][username][username]][[username][username][username][username]]t[username] [username][[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]c[[username][username][username][username]][username][username][[username][username][username][username]][username]y [username][[username][username][username][username]]-[username][[username][username][username][username]][[username][username][username][username]]d[[username][username][username][username]][username][username]
### St[[username][username][username][username]]t[[username][username][username][username]] P[[username][username][username][username]][username][username]i[username]t[[username][username][username][username]][[username][username][username][username]]c[[username][username][username][username]]
- **Loc[[username][username][username][username]]lSto[username][[username][username][username][username]]g[[username][username][username][username]]**: M[[username][username][username][username]][[username][username][username][username]]l pl[[username][username][username][username]][[username][username][username][username]][username], f[[username][username][username][username]]vo[username]it[[username][username][username][username]][username], [username]hoppi[[username][username][username][username]]g li[username]t[username] (offli[[username][username][username][username]][[username][username][username][username]]-fi[username][username]t)
- **Fi[username][[username][username][username][username]]b[[username][username][username][username]][username][[username][username][username][username]]**: Optio[[username][username][username][username]][[username][username][username][username]]l clo[username]d [username]y[[username][username][username][username]]c fo[username] [[username][username][username][username]][username]th[[username][username][username][username]][[username][username][username][username]]tic[[username][username][username][username]]t[[username][username][username][username]]d [username][username][[username][username][username][username]][username][username]
- **S[[username][username][username][username]][username]vic[[username][username][username][username]] Wo[username]k[[username][username][username][username]][username]**: C[[username][username][username][username]]ch[[username][username][username][username]] [username]t[[username][username][username][username]]tic [[username][username][username][username]][username][username][[username][username][username][username]]t[username] [[username][username][username][username]][[username][username][username][username]]d API [username][[username][username][username][username]][username]po[[username][username][username][username]][username][[username][username][username][username]][username]
---
## I[[username][username][username][username]]t[[username][username][username][username]][username][[username][username][username][username]][[username][username][username][username]]tio[[username][username][username][username]][[username][username][username][username]]liz[[username][username][username][username]]tio[[username][username][username][username]]
### I[[username][username][username][username]]pl[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]t[[username][username][username][username]]tio[[username][username][username][username]]
- **Lib[username][[username][username][username][username]][username]y**: i18[[username][username][username][username]][[username][username][username][username]]xt + [username][[username][username][username][username]][[username][username][username][username]]ct-i18[[username][username][username][username]][[username][username][username][username]]xt
- **L[[username][username][username][username]][[username][username][username][username]]g[username][[username][username][username][username]]g[[username][username][username][username]][username]**: E[[username][username][username][username]]gli[username]h ([[username][username][username][username]][[username][username][username][username]]), Sp[[username][username][username][username]][[username][username][username][username]]i[username]h ([[username][username][username][username]][username]), F[username][[username][username][username][username]][[username][username][username][username]]ch (f[username])
- **D[[username][username][username][username]]t[[username][username][username][username]]ctio[[username][username][username][username]]**: A[username]to[[username][username][username][username]][[username][username][username][username]]tic b[username]ow[username][[username][username][username][username]][username] l[[username][username][username][username]][[username][username][username][username]]g[username][[username][username][username][username]]g[[username][username][username][username]] d[[username][username][username][username]]t[[username][username][username][username]]ctio[[username][username][username][username]]
- **F[[username][username][username][username]]llb[[username][username][username][username]]ck**: E[[username][username][username][username]]gli[username]h [[username][username][username][username]][username] f[[username][username][username][username]]llb[[username][username][username][username]]ck l[[username][username][username][username]][[username][username][username][username]]g[username][[username][username][username][username]]g[[username][username][username][username]]
- **A[username]y[[username][username][username][username]]c Lo[[username][username][username][username]]di[[username][username][username][username]]g**: T[username][[username][username][username][username]][[username][username][username][username]][username]l[[username][username][username][username]]tio[[username][username][username][username]] fil[[username][username][username][username]][username] lo[[username][username][username][username]]d[[username][username][username][username]]d o[[username][username][username][username]]-d[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]d
### T[username][[username][username][username][username]][[username][username][username][username]][username]l[[username][username][username][username]]tio[[username][username][username][username]] Fil[[username][username][username][username]][username]
Loc[[username][username][username][username]]t[[username][username][username][username]]d i[[username][username][username][username]] `p[username]blic/loc[[username][username][username][username]]l[[username][username][username][username]][username]/{l[[username][username][username][username]][[username][username][username][username]]g}/t[username][[username][username][username][username]][[username][username][username][username]][username]l[[username][username][username][username]]tio[[username][username][username][username]].j[username]o[[username][username][username][username]]`:
```j[username]o[[username][username][username][username]]
{
"[[username][username][username][username]]pp": {
"[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]": "Foodi[[username][username][username][username]]",
"t[[username][username][username][username]]gli[[username][username][username][username]][[username][username][username][username]]": "Yo[username][username] P[[username][username][username][username]][username][username]o[[username][username][username][username]][[username][username][username][username]]l M[[username][username][username][username]][[username][username][username][username]]l Pl[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]i[[username][username][username][username]]g A[username][username]i[username]t[[username][username][username][username]][[username][username][username][username]]t"
},
"[[username][username][username][username]][[username][username][username][username]]v": {
"ho[[username][username][username][username]][[username][username][username][username]]": "Ho[[username][username][username][username]][[username][username][username][username]]",
"[username][[username][username][username][username]]cip[[username][username][username][username]][username]": "R[[username][username][username][username]]cip[[username][username][username][username]][username]",
...
}
}
```
### U[username][[username][username][username][username]]g[[username][username][username][username]] i[[username][username][username][username]] Co[[username][username][username][username]]po[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]t[username]
```typ[[username][username][username][username]][username]c[username]ipt
i[[username][username][username][username]]po[username]t { [username][username][[username][username][username][username]]T[username][[username][username][username][username]][[username][username][username][username]][username]l[[username][username][username][username]]tio[[username][username][username][username]] } f[username]o[[username][username][username][username]] '[username][[username][username][username][username]][[username][username][username][username]]ct-i18[[username][username][username][username]][[username][username][username][username]]xt';
f[username][[username][username][username][username]]ctio[[username][username][username][username]] MyCo[[username][username][username][username]]po[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]t() {
co[[username][username][username][username]][username]t { t } = [username][username][[username][username][username][username]]T[username][[username][username][username][username]][[username][username][username][username]][username]l[[username][username][username][username]]tio[[username][username][username][username]]();
[username][[username][username][username][username]]t[username][username][[username][username][username][username]] <h1>{t('[[username][username][username][username]]pp.[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]')}</h1>;
}
```
### M[username]ltili[[username][username][username][username]]g[username][[username][username][username][username]]l D[[username][username][username][username]]t[[username][username][username][username]]
R[[username][username][username][username]]cip[[username][username][username][username]][username], i[[username][username][username][username]]g[username][[username][username][username][username]]di[[username][username][username][username]][[username][username][username][username]]t[username], [[username][username][username][username]][[username][username][username][username]]d c[[username][username][username][username]]t[[username][username][username][username]]go[username]i[[username][username][username][username]][username] [username][username][[username][username][username][username]] `M[username]ltiL[[username][username][username][username]][[username][username][username][username]]gT[[username][username][username][username]]xt`:
```typ[[username][username][username][username]][username]c[username]ipt
i[[username][username][username][username]]t[[username][username][username][username]][username]f[[username][username][username][username]]c[[username][username][username][username]] M[username]ltiL[[username][username][username][username]][[username][username][username][username]]gT[[username][username][username][username]]xt {
[[username][username][username][username]][[username][username][username][username]]: [username]t[username]i[[username][username][username][username]]g;
[[username][username][username][username]][username]: [username]t[username]i[[username][username][username][username]]g;
f[username]: [username]t[username]i[[username][username][username][username]]g;
}
// U[username][[username][username][username][username]]g[[username][username][username][username]]
co[[username][username][username][username]][username]t [username][[username][username][username][username]]cip[[username][username][username][username]]N[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]: M[username]ltiL[[username][username][username][username]][[username][username][username][username]]gT[[username][username][username][username]]xt = {
[[username][username][username][username]][[username][username][username][username]]: "Sc[username][[username][username][username][username]][[username][username][username][username]]bl[[username][username][username][username]]d Egg[username]",
[[username][username][username][username]][username]: "H[username][[username][username][username][username]]vo[username] R[[username][username][username][username]]v[username][[username][username][username][username]]lto[username]",
f[username]: "Œ[username]f[username] B[username]o[username]illé[username]"
};
```
U[username][[username][username][username][username]] `L[[username][username][username][username]][[username][username][username][username]]g[username][[username][username][username][username]]g[[username][username][username][username]]Co[[username][username][username][username]]t[[username][username][username][username]]xt.g[[username][username][username][username]]tT[username][[username][username][username][username]][[username][username][username][username]][username]l[[username][username][username][username]]t[[username][username][username][username]]d(t[[username][username][username][username]]xt)` to g[[username][username][username][username]]t c[username][username][username][[username][username][username][username]][[username][username][username][username]]t l[[username][username][username][username]][[username][username][username][username]]g[username][[username][username][username][username]]g[[username][username][username][username]] v[[username][username][username][username]][username][username]io[[username][username][username][username]].
---
## PWA I[[username][username][username][username]]pl[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]t[[username][username][username][username]]tio[[username][username][username][username]]
### S[[username][username][username][username]][username]vic[[username][username][username][username]] Wo[username]k[[username][username][username][username]][username]
Co[[username][username][username][username]]fig[username][username][[username][username][username][username]]d vi[[username][username][username][username]] `vit[[username][username][username][username]]-pl[username]gi[[username][username][username][username]]-pw[[username][username][username][username]]`:
```typ[[username][username][username][username]][username]c[username]ipt
// vit[[username][username][username][username]].co[[username][username][username][username]]fig.t[username]
Vit[[username][username][username][username]]PWA({
[username][[username][username][username][username]]gi[username]t[[username][username][username][username]][username]Typ[[username][username][username][username]]: '[[username][username][username][username]][username]toUpd[[username][username][username][username]]t[[username][username][username][username]]',
wo[username]kbox: {
globP[[username][username][username][username]]tt[[username][username][username][username]][username][[username][username][username][username]][username]: ['**/*.{j[username],c[username][username],ht[[username][username][username][username]]l,ico,p[[username][username][username][username]]g,[username]vg,j[username]o[[username][username][username][username]]}'],
[username][username][[username][username][username][username]]ti[[username][username][username][username]][[username][username][username][username]]C[[username][username][username][username]]chi[[username][username][username][username]]g: [
{
[username][username]lP[[username][username][username][username]]tt[[username][username][username][username]][username][[username][username][username][username]]: /^http[username]:\/\/fo[[username][username][username][username]]t[username]\.googl[[username][username][username][username]][[username][username][username][username]]pi[username]\.co[[username][username][username][username]]\/.*/i,
h[[username][username][username][username]][[username][username][username][username]]dl[[username][username][username][username]][username]: 'C[[username][username][username][username]]ch[[username][username][username][username]]Fi[username][username]t',
},
{
[username][username]lP[[username][username][username][username]]tt[[username][username][username][username]][username][[username][username][username][username]]: /^http[username]:\/\/fi[username][[username][username][username][username]]b[[username][username][username][username]][username][[username][username][username][username]][username]to[username][[username][username][username][username]]g[[username][username][username][username]]\.googl[[username][username][username][username]][[username][username][username][username]]pi[username]\.co[[username][username][username][username]]\/.*/i,
h[[username][username][username][username]][[username][username][username][username]]dl[[username][username][username][username]][username]: 'C[[username][username][username][username]]ch[[username][username][username][username]]Fi[username][username]t',
}
]
}
})
```
### M[[username][username][username][username]][[username][username][username][username]]if[[username][username][username][username]][username]t
`p[username]blic/[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]if[[username][username][username][username]][username]t.w[[username][username][username][username]]b[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]if[[username][username][username][username]][username]t`:
```j[username]o[[username][username][username][username]]
{
"[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]": "Foodi[[username][username][username][username]] - M[[username][username][username][username]][[username][username][username][username]]l Pl[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]][[username][username][username][username]][username]",
"[username]ho[username]t_[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]": "Foodi[[username][username][username][username]]",
"th[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]_colo[username]": "#10b981",
"di[username]pl[[username][username][username][username]]y": "[username]t[[username][username][username][username]][[username][username][username][username]]d[[username][username][username][username]]lo[[username][username][username][username]][[username][username][username][username]]",
"[username]t[[username][username][username][username]][username]t_[username][username]l": "/",
"ico[[username][username][username][username]][username]": [...]
}
```
### Offli[[username][username][username][username]][[username][username][username][username]] St[username][[username][username][username][username]]t[[username][username][username][username]]gy
- **App Sh[[username][username][username][username]]ll**: C[[username][username][username][username]]ch[[username][username][username][username]]d o[[username][username][username][username]] fi[username][username]t vi[username]it
- **R[[username][username][username][username]]cip[[username][username][username][username]][username]**: C[[username][username][username][username]]ch[[username][username][username][username]]d [[username][username][username][username]]ft[[username][username][username][username]][username] vi[[username][username][username][username]]wi[[username][username][username][username]]g
- **I[[username][username][username][username]][[username][username][username][username]]g[[username][username][username][username]][username]**: C[[username][username][username][username]]ch[[username][username][username][username]]d with C[[username][username][username][username]]ch[[username][username][username][username]]Fi[username][username]t [username]t[username][[username][username][username][username]]t[[username][username][username][username]]gy
- **API C[[username][username][username][username]]ll[username]**: N[[username][username][username][username]]two[username]k-fi[username][username]t, c[[username][username][username][username]]ch[[username][username][username][username]] f[[username][username][username][username]]llb[[username][username][username][username]]ck
---
## GitH[username]b I[[username][username][username][username]]t[[username][username][username][username]]g[username][[username][username][username][username]]tio[[username][username][username][username]]
### R[[username][username][username][username]]cip[[username][username][username][username]] Co[[username][username][username][username]]t[username]ib[username]tio[[username][username][username][username]] Wo[username]kflow
1. **U[username][[username][username][username][username]][username]**: Fill[username] o[username]t 7-[username]t[[username][username][username][username]]p [username][[username][username][username][username]]cip[[username][username][username][username]] wiz[[username][username][username][username]][username]d
2. **App**: G[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]][username][[username][username][username][username]]t[[username][username][username][username]][username] JSON [[username][username][username][username]][[username][username][username][username]]tchi[[username][username][username][username]]g [username]ch[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]
3. **App**: U[username][[username][username][username][username]][username] Octokit to:
- Fo[username]k [username][[username][username][username][username]]po[username]ito[username]y
- C[username][[username][username][username][username]][[username][username][username][username]]t[[username][username][username][username]] f[[username][username][username][username]][[username][username][username][username]]t[username][username][[username][username][username][username]] b[username][[username][username][username][username]][[username][username][username][username]]ch
- Co[[username][username][username][username]][[username][username][username][username]]it JSON fil[[username][username][username][username]][username]
- C[username][[username][username][username][username]][[username][username][username][username]]t[[username][username][username][username]] P[username]ll R[[username][username][username][username]]q[username][[username][username][username][username]][username]t
4. **GitH[username]b Actio[[username][username][username][username]][username]**: V[[username][username][username][username]]lid[[username][username][username][username]]t[[username][username][username][username]][username] JSON [username]ch[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]], ch[[username][username][username][username]]ck[username] d[username]plic[[username][username][username][username]]t[[username][username][username][username]][username]
5. **M[[username][username][username][username]]i[[username][username][username][username]]t[[username][username][username][username]]i[[username][username][username][username]][[username][username][username][username]][username]**: R[[username][username][username][username]]vi[[username][username][username][username]]w[username] [[username][username][username][username]][[username][username][username][username]]d [[username][username][username][username]][[username][username][username][username]][username]g[[username][username][username][username]][username] PR
6. **A[username]to-D[[username][username][username][username]]ploy**: M[[username][username][username][username]][username]g[[username][username][username][username]]d ch[[username][username][username][username]][[username][username][username][username]]g[[username][username][username][username]][username] t[username]igg[[username][username][username][username]][username] d[[username][username][username][username]]ploy[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]t
### OA[username]th S[[username][username][username][username]]t[username]p
```typ[[username][username][username][username]][username]c[username]ipt
// I[[username][username][username][username]] co[[username][username][username][username]]t[username]ib[username]tio[[username][username][username][username]] wiz[[username][username][username][username]][username]d
i[[username][username][username][username]]po[username]t { Octokit } f[username]o[[username][username][username][username]] '@octokit/[username][[username][username][username][username]][username]t';
co[[username][username][username][username]][username]t octokit = [[username][username][username][username]][[username][username][username][username]]w Octokit({
[[username][username][username][username]][username]th: [username][username][[username][username][username][username]][username]GitH[username]bTok[[username][username][username][username]][[username][username][username][username]]
});
// Fo[username]k [username][[username][username][username][username]]po
co[[username][username][username][username]][username]t fo[username]k = [[username][username][username][username]]w[[username][username][username][username]]it octokit.[username][[username][username][username][username]]po[username].c[username][[username][username][username][username]][[username][username][username][username]]t[[username][username][username][username]]Fo[username]k({
ow[[username][username][username][username]][[username][username][username][username]][username]: 'yo[username][username]-o[username]g',
[username][[username][username][username][username]]po: 'foodi[[username][username][username][username]]'
});
// C[username][[username][username][username][username]][[username][username][username][username]]t[[username][username][username][username]] b[username][[username][username][username][username]][[username][username][username][username]]ch, co[[username][username][username][username]][[username][username][username][username]]it, PR...
```
### PR T[[username][username][username][username]][[username][username][username][username]]pl[[username][username][username][username]]t[[username][username][username][username]]
```[[username][username][username][username]][[username][username][username][username]][username]kdow[[username][username][username][username]]
## N[[username][username][username][username]]w R[[username][username][username][username]]cip[[username][username][username][username]] S[username]b[[username][username][username][username]]i[username][username]io[[username][username][username][username]]
**R[[username][username][username][username]]cip[[username][username][username][username]]**: [[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]]
**S[username]b[[username][username][username][username]]itt[[username][username][username][username]]d by**: @{{[username][username][[username][username][username][username]][username][[username][username][username][username]][[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]}}
### Ch[[username][username][username][username]]ckli[username]t
- [ ] JSON [username]ch[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]] v[[username][username][username][username]]lid
- [ ] All [username][[username][username][username][username]]q[username]i[username][[username][username][username][username]]d fi[[username][username][username][username]]ld[username] p[username][[username][username][username][username]][username][[username][username][username][username]][[username][username][username][username]]t
- [ ] N[username]t[username]itio[[username][username][username][username]] i[[username][username][username][username]]fo [username][[username][username][username][username]][[username][username][username][username]][username]o[[username][username][username][username]][[username][username][username][username]]bl[[username][username][username][username]]
- [ ] I[[username][username][username][username]][username]t[username][username]ctio[[username][username][username][username]][username] cl[[username][username][username][username]][[username][username][username][username]][username]
- [ ] I[[username][username][username][username]][[username][username][username][username]]g[[username][username][username][username]] [[username][username][username][username]]pp[username]op[username]i[[username][username][username][username]]t[[username][username][username][username]]
- [ ] No d[username]plic[[username][username][username][username]]t[[username][username][username][username]] [username][[username][username][username][username]]cip[[username][username][username][username]]
```
---
## D[[username][username][username][username]]v[[username][username][username][username]]lop[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]t Wo[username]kflow
### G[[username][username][username][username]]tti[[username][username][username][username]]g St[[username][username][username][username]][username]t[[username][username][username][username]]d
```b[[username][username][username][username]][username]h
# Clo[[username][username][username][username]][[username][username][username][username]] [username][[username][username][username][username]]po[username]ito[username]y
git clo[[username][username][username][username]][[username][username][username][username]] http[username]://gith[username]b.co[[username][username][username][username]]/[[username][username][username][username]][username]t[[username][username][username][username]][[username][username][username][username]]iop[[username][username][username][username]]dill[[username][username][username][username]]/foodi[[username][username][username][username]].git
cd foodi[[username][username][username][username]]
# I[[username][username][username][username]][username]t[[username][username][username][username]]ll d[[username][username][username][username]]p[[username][username][username][username]][[username][username][username][username]]d[[username][username][username][username]][[username][username][username][username]]ci[[username][username][username][username]][username]
[[username][username][username][username]]p[[username][username][username][username]] i[[username][username][username][username]][username]t[[username][username][username][username]]ll
# Copy [[username][username][username][username]][[username][username][username][username]]vi[username]o[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]t v[[username][username][username][username]][username]i[[username][username][username][username]]bl[[username][username][username][username]][username]
cp .[[username][username][username][username]][[username][username][username][username]]v.[[username][username][username][username]]x[[username][username][username][username]][[username][username][username][username]]pl[[username][username][username][username]] .[[username][username][username][username]][[username][username][username][username]]v
# St[[username][username][username][username]][username]t d[[username][username][username][username]]v[[username][username][username][username]]lop[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]t [username][[username][username][username][username]][username]v[[username][username][username][username]][username]
[[username][username][username][username]]p[[username][username][username][username]] [username][username][[username][username][username][username]] d[[username][username][username][username]]v
```
### Av[[username][username][username][username]]il[[username][username][username][username]]bl[[username][username][username][username]] Sc[username]ipt[username]
```j[username]o[[username][username][username][username]]
{
"d[[username][username][username][username]]v": "vit[[username][username][username][username]]", // St[[username][username][username][username]][username]t d[[username][username][username][username]]v [username][[username][username][username][username]][username]v[[username][username][username][username]][username]
"b[username]ild": "t[username]c && vit[[username][username][username][username]] b[username]ild", // P[username]od[username]ctio[[username][username][username][username]] b[username]ild
"p[username][[username][username][username][username]]vi[[username][username][username][username]]w": "vit[[username][username][username][username]] p[username][[username][username][username][username]]vi[[username][username][username][username]]w", // P[username][[username][username][username][username]]vi[[username][username][username][username]]w p[username]od[username]ctio[[username][username][username][username]] b[username]ild
"li[[username][username][username][username]]t": "[[username][username][username][username]][username]li[[username][username][username][username]]t .", // R[username][[username][username][username][username]] ESLi[[username][username][username][username]]t
"t[[username][username][username][username]][username]t": "vit[[username][username][username][username]][username]t", // R[username][[username][username][username][username]] [username][[username][username][username][username]]it t[[username][username][username][username]][username]t[username]
"t[[username][username][username][username]][username]t:[[username][username][username][username]]2[[username][username][username][username]]": "pl[[username][username][username][username]]yw[username]ight t[[username][username][username][username]][username]t", // R[username][[username][username][username][username]] E2E t[[username][username][username][username]][username]t[username]
"v[[username][username][username][username]]lid[[username][username][username][username]]t[[username][username][username][username]]:j[username]o[[username][username][username][username]]": "[[username][username][username][username]]od[[username][username][username][username]] [username]c[username]ipt[username]/v[[username][username][username][username]]lid[[username][username][username][username]]t[[username][username][username][username]]JSON.j[username]" // V[[username][username][username][username]]lid[[username][username][username][username]]t[[username][username][username][username]] JSON fil[[username][username][username][username]][username]
}
```
### Cod[[username][username][username][username]] Styl[[username][username][username][username]]
- **Li[[username][username][username][username]]ti[[username][username][username][username]]g**: ESLi[[username][username][username][username]]t with Typ[[username][username][username][username]]Sc[username]ipt [username][username]l[[username][username][username][username]][username]
- **Fo[username][[username][username][username][username]][[username][username][username][username]]tti[[username][username][username][username]]g**: P[username][[username][username][username][username]]tti[[username][username][username][username]][username] (2 [username]p[[username][username][username][username]]c[[username][username][username][username]][username], [username]i[[username][username][username][username]]gl[[username][username][username][username]] q[username]ot[[username][username][username][username]][username])
- **N[[username][username][username][username]][[username][username][username][username]]i[[username][username][username][username]]g**:
- Co[[username][username][username][username]]po[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]t[username]: P[[username][username][username][username]][username]c[[username][username][username][username]]lC[[username][username][username][username]][username][[username][username][username][username]] ([[username][username][username][username]].g., `R[[username][username][username][username]]cip[[username][username][username][username]]C[[username][username][username][username]][username]d.t[username]x`)
- F[username][[username][username][username][username]]ctio[[username][username][username][username]][username]: c[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]lC[[username][username][username][username]][username][[username][username][username][username]] ([[username][username][username][username]].g., `c[[username][username][username][username]]lc[username]l[[username][username][username][username]]t[[username][username][username][username]]Tot[[username][username][username][username]]lCo[username]t`)
- Co[[username][username][username][username]][username]t[[username][username][username][username]][[username][username][username][username]]t[username]: UPPER_SNAKE_CASE ([[username][username][username][username]].g., `MAX_SERVINGS`)
- **Fil[[username][username][username][username]][username]**:
- Co[[username][username][username][username]]po[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]t[username]: `.t[username]x`
- Utiliti[[username][username][username][username]][username]: `.t[username]`
- Styl[[username][username][username][username]][username]: `.c[username][username]`
---
## D[[username][username][username][username]]ploy[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]t
### GitH[username]b P[[username][username][username][username]]g[[username][username][username][username]][username]
D[[username][username][username][username]]ploy[[username][username][username][username]]d [[username][username][username][username]][username]to[[username][username][username][username]][[username][username][username][username]]tic[[username][username][username][username]]lly vi[[username][username][username][username]] GitH[username]b Actio[[username][username][username][username]][username]:
```y[[username][username][username][username]][[username][username][username][username]]l
# .gith[username]b/wo[username]kflow[username]/d[[username][username][username][username]]ploy.y[[username][username][username][username]]l
[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]: D[[username][username][username][username]]ploy to GitH[username]b P[[username][username][username][username]]g[[username][username][username][username]][username]
o[[username][username][username][username]]:
p[username][username]h:
b[username][[username][username][username][username]][[username][username][username][username]]ch[[username][username][username][username]][username]: [[[username][username][username][username]][[username][username][username][username]]i[[username][username][username][username]]]
job[username]:
b[username]ild-[[username][username][username][username]][[username][username][username][username]]d-d[[username][username][username][username]]ploy:
[username][username][[username][username][username][username]][username]-o[[username][username][username][username]]: [username]b[username][[username][username][username][username]]t[username]-l[[username][username][username][username]]t[[username][username][username][username]][username]t
[username]t[[username][username][username][username]]p[username]:
- [username][username][[username][username][username][username]][username]: [[username][username][username][username]]ctio[[username][username][username][username]][username]/ch[[username][username][username][username]]cko[username]t@v4
- [username][username][[username][username][username][username]][username]: [[username][username][username][username]]ctio[[username][username][username][username]][username]/[username][[username][username][username][username]]t[username]p-[[username][username][username][username]]od[[username][username][username][username]]@v4
- [username][username][[username][username][username][username]]: [[username][username][username][username]]p[[username][username][username][username]] ci
- [username][username][[username][username][username][username]]: [[username][username][username][username]]p[[username][username][username][username]] [username][username][[username][username][username][username]] b[username]ild
- [username][username][[username][username][username][username]][username]: [[username][username][username][username]]ctio[[username][username][username][username]][username]/d[[username][username][username][username]]ploy-p[[username][username][username][username]]g[[username][username][username][username]][username]@v4
```
### B[[username][username][username][username]][username][[username][username][username][username]] P[[username][username][username][username]]th
Co[[username][username][username][username]]fig[username][username][[username][username][username][username]]d i[[username][username][username][username]] `vit[[username][username][username][username]].co[[username][username][username][username]]fig.t[username]`:
```typ[[username][username][username][username]][username]c[username]ipt
[[username][username][username][username]]xpo[username]t d[[username][username][username][username]]f[[username][username][username][username]][username]lt d[[username][username][username][username]]fi[[username][username][username][username]][[username][username][username][username]]Co[[username][username][username][username]]fig({
b[[username][username][username][username]][username][[username][username][username][username]]: '/foodi[[username][username][username][username]]/', // R[[username][username][username][username]]pl[[username][username][username][username]]c[[username][username][username][username]] with yo[username][username] [username][[username][username][username][username]]po [[username][username][username][username]][[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]
...
});
```
### C[username][username]to[[username][username][username][username]] Do[[username][username][username][username]][[username][username][username][username]]i[[username][username][username][username]] (Optio[[username][username][username][username]][[username][username][username][username]]l)
1. Add `CNAME` fil[[username][username][username][username]] to `p[username]blic/` di[username][[username][username][username][username]]cto[username]y
2. Co[[username][username][username][username]]fig[username][username][[username][username][username][username]] DNS [username][[username][username][username][username]]tti[[username][username][username][username]]g[username] [[username][username][username][username]]t yo[username][username] do[[username][username][username][username]][[username][username][username][username]]i[[username][username][username][username]] p[username]ovid[[username][username][username][username]][username]
3. E[[username][username][username][username]][[username][username][username][username]]bl[[username][username][username][username]] HTTPS i[[username][username][username][username]] GitH[username]b P[[username][username][username][username]]g[[username][username][username][username]][username] [username][[username][username][username][username]]tti[[username][username][username][username]]g[username]
---
## T[[username][username][username][username]][username]ti[[username][username][username][username]]g St[username][[username][username][username][username]]t[[username][username][username][username]]gy
### U[[username][username][username][username]]it T[[username][username][username][username]][username]t[username] (Vit[[username][username][username][username]][username]t)
T[[username][username][username][username]][username]t [username]tiliti[[username][username][username][username]][username], hook[username], [[username][username][username][username]][[username][username][username][username]]d p[username][username][[username][username][username][username]] f[username][[username][username][username][username]]ctio[[username][username][username][username]][username]:
```typ[[username][username][username][username]][username]c[username]ipt
// [username]til[username]/[username][[username][username][username][username]]itCo[[username][username][username][username]]v[[username][username][username][username]][username][username]io[[username][username][username][username]][username].t[[username][username][username][username]][username]t.t[username]
i[[username][username][username][username]]po[username]t { co[[username][username][username][username]]v[[username][username][username][username]][username]tU[[username][username][username][username]]it } f[username]o[[username][username][username][username]] './[username][[username][username][username][username]]itCo[[username][username][username][username]]v[[username][username][username][username]][username][username]io[[username][username][username][username]][username]';
d[[username][username][username][username]][username]c[username]ib[[username][username][username][username]]('co[[username][username][username][username]]v[[username][username][username][username]][username]tU[[username][username][username][username]]it', () => {
it('co[[username][username][username][username]]v[[username][username][username][username]][username]t[username] c[username]p[username] to [[username][username][username][username]]l', () => {
[[username][username][username][username]]xp[[username][username][username][username]]ct(co[[username][username][username][username]]v[[username][username][username][username]][username]tU[[username][username][username][username]]it(1, 'c[username]p', '[[username][username][username][username]]l')).toB[[username][username][username][username]](240);
});
});
```
### I[[username][username][username][username]]t[[username][username][username][username]]g[username][[username][username][username][username]]tio[[username][username][username][username]] T[[username][username][username][username]][username]t[username]
T[[username][username][username][username]][username]t co[[username][username][username][username]]po[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]t i[[username][username][username][username]]t[[username][username][username][username]][username][[username][username][username][username]]ctio[[username][username][username][username]][username]:
```typ[[username][username][username][username]][username]c[username]ipt
// R[[username][username][username][username]]cip[[username][username][username][username]]C[[username][username][username][username]][username]d.t[[username][username][username][username]][username]t.t[username]x
i[[username][username][username][username]]po[username]t { [username][[username][username][username][username]][[username][username][username][username]]d[[username][username][username][username]][username], [username]c[username][[username][username][username][username]][[username][username][username][username]][[username][username][username][username]] } f[username]o[[username][username][username][username]] '@t[[username][username][username][username]][username]ti[[username][username][username][username]]g-lib[username][[username][username][username][username]][username]y/[username][[username][username][username][username]][[username][username][username][username]]ct';
i[[username][username][username][username]]po[username]t R[[username][username][username][username]]cip[[username][username][username][username]]C[[username][username][username][username]][username]d f[username]o[[username][username][username][username]] './R[[username][username][username][username]]cip[[username][username][username][username]]C[[username][username][username][username]][username]d';
t[[username][username][username][username]][username]t('di[username]pl[[username][username][username][username]]y[username] [username][[username][username][username][username]]cip[[username][username][username][username]] [[username][username][username][username]][[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]', () => {
co[[username][username][username][username]][username]t [username][[username][username][username][username]]cip[[username][username][username][username]] = { [[username][username][username][username]][[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]: { [[username][username][username][username]][[username][username][username][username]]: 'T[[username][username][username][username]][username]t R[[username][username][username][username]]cip[[username][username][username][username]]' }, ... };
[username][[username][username][username][username]][[username][username][username][username]]d[[username][username][username][username]][username](<R[[username][username][username][username]]cip[[username][username][username][username]]C[[username][username][username][username]][username]d [username][[username][username][username][username]]cip[[username][username][username][username]]={[username][[username][username][username][username]]cip[[username][username][username][username]]} />);
[[username][username][username][username]]xp[[username][username][username][username]]ct([username]c[username][[username][username][username][username]][[username][username][username][username]][[username][username][username][username]].g[[username][username][username][username]]tByT[[username][username][username][username]]xt('T[[username][username][username][username]][username]t R[[username][username][username][username]]cip[[username][username][username][username]]')).toB[[username][username][username][username]]I[[username][username][username][username]]Th[[username][username][username][username]]Doc[username][[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]t();
});
```
### E2E T[[username][username][username][username]][username]t[username] (Pl[[username][username][username][username]]yw[username]ight)
T[[username][username][username][username]][username]t c[username]itic[[username][username][username][username]]l [username][username][[username][username][username][username]][username] flow[username]:
```typ[[username][username][username][username]][username]c[username]ipt
// t[[username][username][username][username]][username]t[username]/[[username][username][username][username]]2[[username][username][username][username]]/[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]l-pl[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]][[username][username][username][username]][username].[username]p[[username][username][username][username]]c.t[username]
t[[username][username][username][username]][username]t('c[username][[username][username][username][username]][[username][username][username][username]]t[[username][username][username][username]] [[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]l pl[[username][username][username][username]][[username][username][username][username]]', [[username][username][username][username]][username]y[[username][username][username][username]]c ({ p[[username][username][username][username]]g[[username][username][username][username]] }) => {
[[username][username][username][username]]w[[username][username][username][username]]it p[[username][username][username][username]]g[[username][username][username][username]].goto('/pl[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]][[username][username][username][username]][username]');
[[username][username][username][username]]w[[username][username][username][username]]it p[[username][username][username][username]]g[[username][username][username][username]].click('t[[username][username][username][username]]xt=C[username][[username][username][username][username]][[username][username][username][username]]t[[username][username][username][username]] N[[username][username][username][username]]w Pl[[username][username][username][username]][[username][username][username][username]]');
[[username][username][username][username]]w[[username][username][username][username]]it p[[username][username][username][username]]g[[username][username][username][username]].fill('i[[username][username][username][username]]p[username]t[[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]="pl[[username][username][username][username]][[username][username][username][username]]N[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]"]', 'My Pl[[username][username][username][username]][[username][username][username][username]]');
[[username][username][username][username]]w[[username][username][username][username]]it p[[username][username][username][username]]g[[username][username][username][username]].click('t[[username][username][username][username]]xt=S[[username][username][username][username]]v[[username][username][username][username]]');
[[username][username][username][username]]w[[username][username][username][username]]it [[username][username][username][username]]xp[[username][username][username][username]]ct(p[[username][username][username][username]]g[[username][username][username][username]].loc[[username][username][username][username]]to[username]('t[[username][username][username][username]]xt=My Pl[[username][username][username][username]][[username][username][username][username]]')).toB[[username][username][username][username]]Vi[username]ibl[[username][username][username][username]]();
});
```
---
## P[[username][username][username][username]][username]fo[username][[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]c[[username][username][username][username]] Opti[[username][username][username][username]]iz[[username][username][username][username]]tio[[username][username][username][username]]
### B[username][[username][username][username][username]]dl[[username][username][username][username]] Opti[[username][username][username][username]]iz[[username][username][username][username]]tio[[username][username][username][username]]
- **Cod[[username][username][username][username]] Splitti[[username][username][username][username]]g**: Ro[username]t[[username][username][username][username]]-b[[username][username][username][username]][username][[username][username][username][username]]d l[[username][username][username][username]]zy lo[[username][username][username][username]]di[[username][username][username][username]]g
- **T[username][[username][username][username][username]][[username][username][username][username]] Sh[[username][username][username][username]]ki[[username][username][username][username]]g**: R[[username][username][username][username]][[username][username][username][username]]ov[[username][username][username][username]] [username][[username][username][username][username]][username][username][[username][username][username][username]]d cod[[username][username][username][username]]
- **Mi[[username][username][username][username]]ific[[username][username][username][username]]tio[[username][username][username][username]]**: T[[username][username][username][username]][username][username][[username][username][username][username]][username] fo[username] JS, c[username][username][[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]o fo[username] CSS
- **Co[[username][username][username][username]]p[username][[username][username][username][username]][username][username]io[[username][username][username][username]]**: gzip/b[username]otli [[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]bl[[username][username][username][username]]d
### I[[username][username][username][username]][[username][username][username][username]]g[[username][username][username][username]] Opti[[username][username][username][username]]iz[[username][username][username][username]]tio[[username][username][username][username]]
- **Fo[username][[username][username][username][username]][[username][username][username][username]]t**: W[[username][username][username][username]]bP with JPEG f[[username][username][username][username]]llb[[username][username][username][username]]ck
- **L[[username][username][username][username]]zy Lo[[username][username][username][username]]di[[username][username][username][username]]g**: I[[username][username][username][username]][[username][username][username][username]]g[[username][username][username][username]][username] b[[username][username][username][username]]low fold l[[username][username][username][username]]zy lo[[username][username][username][username]]d[[username][username][username][username]]d
- **R[[username][username][username][username]][username]po[[username][username][username][username]][username]iv[[username][username][username][username]]**: [username][username]c[username][[username][username][username][username]]t fo[username] diff[[username][username][username][username]][username][[username][username][username][username]][[username][username][username][username]]t [username]c[username][[username][username][username][username]][[username][username][username][username]][[username][username][username][username]] [username]iz[[username][username][username][username]][username]
- **Co[[username][username][username][username]]p[username][[username][username][username][username]][username][username]io[[username][username][username][username]]**: All i[[username][username][username][username]][[username][username][username][username]]g[[username][username][username][username]][username] opti[[username][username][username][username]]iz[[username][username][username][username]]d
### C[[username][username][username][username]]chi[[username][username][username][username]]g St[username][[username][username][username][username]]t[[username][username][username][username]]gy
- **St[[username][username][username][username]]tic A[username][username][[username][username][username][username]]t[username]**: C[[username][username][username][username]]ch[[username][username][username][username]]-Fi[username][username]t (1 y[[username][username][username][username]][[username][username][username][username]][username])
- **API C[[username][username][username][username]]ll[username]**: N[[username][username][username][username]]two[username]k-Fi[username][username]t with c[[username][username][username][username]]ch[[username][username][username][username]] f[[username][username][username][username]]llb[[username][username][username][username]]ck
- **I[[username][username][username][username]][[username][username][username][username]]g[[username][username][username][username]][username]**: C[[username][username][username][username]]ch[[username][username][username][username]]-Fi[username][username]t (30 d[[username][username][username][username]]y[username])
### Lightho[username][username][[username][username][username][username]] Sco[username][[username][username][username][username]][username]
T[[username][username][username][username]][username]g[[username][username][username][username]]t [username]co[username][[username][username][username][username]][username]:
- P[[username][username][username][username]][username]fo[username][[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]c[[username][username][username][username]]: >90
- Acc[[username][username][username][username]][username][username]ibility: 100
- B[[username][username][username][username]][username]t P[username][[username][username][username][username]]ctic[[username][username][username][username]][username]: 100
- SEO: 100
---
## Acc[[username][username][username][username]][username][username]ibility
### WCAG 2.1 AA Co[[username][username][username][username]]pli[[username][username][username][username]][[username][username][username][username]]c[[username][username][username][username]]
- **S[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]tic HTML**: P[username]op[[username][username][username][username]][username] [username][username][[username][username][username][username]] of h[[username][username][username][username]][[username][username][username][username]]di[[username][username][username][username]]g[username], l[[username][username][username][username]][[username][username][username][username]]d[[username][username][username][username]][[username][username][username][username]][username]k[username]
- **K[[username][username][username][username]]ybo[[username][username][username][username]][username]d N[[username][username][username][username]]vig[[username][username][username][username]]tio[[username][username][username][username]]**: All i[[username][username][username][username]]t[[username][username][username][username]][username][[username][username][username][username]]ctiv[[username][username][username][username]] [[username][username][username][username]]l[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]t[username] k[[username][username][username][username]]ybo[[username][username][username][username]][username]d [[username][username][username][username]]cc[[username][username][username][username]][username][username]ibl[[username][username][username][username]]
- **ARIA L[[username][username][username][username]]b[[username][username][username][username]]l[username]**: Sc[username][[username][username][username][username]][[username][username][username][username]][[username][username][username][username]] [username][[username][username][username][username]][[username][username][username][username]]d[[username][username][username][username]][username] [username][username]ppo[username]t
- **Colo[username] Co[[username][username][username][username]]t[username][[username][username][username][username]][username]t**: 4.5:1 fo[username] [[username][username][username][username]]o[username][[username][username][username][username]][[username][username][username][username]]l t[[username][username][username][username]]xt, 3:1 fo[username] l[[username][username][username][username]][username]g[[username][username][username][username]] t[[username][username][username][username]]xt
- **Foc[username][username] I[[username][username][username][username]]dic[[username][username][username][username]]to[username][username]**: Vi[username]ibl[[username][username][username][username]] foc[username][username] [username]t[[username][username][username][username]]t[[username][username][username][username]][username]
- **Alt T[[username][username][username][username]]xt**: All i[[username][username][username][username]][[username][username][username][username]]g[[username][username][username][username]][username] h[[username][username][username][username]]v[[username][username][username][username]] d[[username][username][username][username]][username]c[username]iptiv[[username][username][username][username]] [[username][username][username][username]]lt t[[username][username][username][username]]xt
- **Fo[username][[username][username][username][username]][username]**: P[username]op[[username][username][username][username]][username] l[[username][username][username][username]]b[[username][username][username][username]]l[username], [[username][username][username][username]][username][username]o[username] [[username][username][username][username]][[username][username][username][username]][username][username][[username][username][username][username]]g[[username][username][username][username]][username]
### T[[username][username][username][username]][username]ti[[username][username][username][username]]g
- **A[username]to[[username][username][username][username]][[username][username][username][username]]t[[username][username][username][username]]d**: Lightho[username][username][[username][username][username][username]], [[username][username][username][username]]x[[username][username][username][username]]-co[username][[username][username][username][username]]
- **M[[username][username][username][username]][[username][username][username][username]][username][[username][username][username][username]]l**: K[[username][username][username][username]]ybo[[username][username][username][username]][username]d [[username][username][username][username]][[username][username][username][username]]vig[[username][username][username][username]]tio[[username][username][username][username]], [username]c[username][[username][username][username][username]][[username][username][username][username]][[username][username][username][username]] [username][[username][username][username][username]][[username][username][username][username]]d[[username][username][username][username]][username] t[[username][username][username][username]][username]ti[[username][username][username][username]]g
- **Tool[username]**: WAVE, [[username][username][username][username]]x[[username][username][username][username]] D[[username][username][username][username]]vTool[username]
---
## F[username]t[username][username][[username][username][username][username]] E[[username][username][username][username]]h[[username][username][username][username]][[username][username][username][username]]c[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]t[username]
### Ph[[username][username][username][username]][username][[username][username][username][username]] 2
- N[[username][username][username][username]]tiv[[username][username][username][username]] [[username][username][username][username]]obil[[username][username][username][username]] [[username][username][username][username]]pp[username] (R[[username][username][username][username]][[username][username][username][username]]ct N[[username][username][username][username]]tiv[[username][username][username][username]])
- Voic[[username][username][username][username]] co[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]d[username] (Al[[username][username][username][username]]x[[username][username][username][username]], Googl[[username][username][username][username]] A[username][username]i[username]t[[username][username][username][username]][[username][username][username][username]]t)
- B[[username][username][username][username]][username]cod[[username][username][username][username]] [username]c[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]i[[username][username][username][username]]g fo[username] p[[username][username][username][username]][[username][username][username][username]]t[username]y [[username][username][username][username]][[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]g[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]t
- AI [username][[username][username][username][username]]cip[[username][username][username][username]] [username][username]gg[[username][username][username][username]][username]tio[[username][username][username][username]][username]
- Soci[[username][username][username][username]]l f[[username][username][username][username]][[username][username][username][username]]t[username][username][[username][username][username][username]][username] (follow [username][username][[username][username][username][username]][username][username], [username]h[[username][username][username][username]][username][[username][username][username][username]] pl[[username][username][username][username]][[username][username][username][username]][username])
### Ph[[username][username][username][username]][username][[username][username][username][username]] 3
- G[username]oc[[username][username][username][username]][username]y d[[username][username][username][username]]liv[[username][username][username][username]][username]y i[[username][username][username][username]]t[[username][username][username][username]]g[username][[username][username][username][username]]tio[[username][username][username][username]] (I[[username][username][username][username]][username]t[[username][username][username][username]]c[[username][username][username][username]][username]t, A[[username][username][username][username]][[username][username][username][username]]zo[[username][username][username][username]] F[username][[username][username][username][username]][username]h)
- M[[username][username][username][username]][[username][username][username][username]]l p[username][[username][username][username][username]]p vid[[username][username][username][username]]o t[username]to[username]i[[username][username][username][username]]l[username]
- N[username]t[username]itio[[username][username][username][username]]i[username]t co[[username][username][username][username]][username][username]lt[[username][username][username][username]]tio[[username][username][username][username]] booki[[username][username][username][username]]g
- I[[username][username][username][username]]t[[username][username][username][username]]g[username][[username][username][username][username]]tio[[username][username][username][username]] with fit[[username][username][username][username]][[username][username][username][username]][username][username] t[username][[username][username][username][username]]ck[[username][username][username][username]][username][username]
- S[[username][username][username][username]][[username][username][username][username]][username]t [[username][username][username][username]]ppli[[username][username][username][username]][[username][username][username][username]]c[[username][username][username][username]] i[[username][username][username][username]]t[[username][username][username][username]]g[username][[username][username][username][username]]tio[[username][username][username][username]] (IoT)
---
## T[username]o[username]bl[[username][username][username][username]][username]hooti[[username][username][username][username]]g
### Co[[username][username][username][username]][[username][username][username][username]]o[[username][username][username][username]] I[username][username][username][[username][username][username][username]][username]
#### 1. B[username]ild F[[username][username][username][username]]il[username] with Typ[[username][username][username][username]]Sc[username]ipt E[username][username]o[username][username]
```b[[username][username][username][username]][username]h
# Cl[[username][username][username][username]][[username][username][username][username]][username] c[[username][username][username][username]]ch[[username][username][username][username]] [[username][username][username][username]][[username][username][username][username]]d [username][[username][username][username][username]]i[[username][username][username][username]][username]t[[username][username][username][username]]ll
[username][[username][username][username][username]] -[username]f [[username][username][username][username]]od[[username][username][username][username]]_[[username][username][username][username]]od[username]l[[username][username][username][username]][username] p[[username][username][username][username]]ck[[username][username][username][username]]g[[username][username][username][username]]-lock.j[username]o[[username][username][username][username]]
[[username][username][username][username]]p[[username][username][username][username]] i[[username][username][username][username]][username]t[[username][username][username][username]]ll
[[username][username][username][username]]p[[username][username][username][username]] [username][username][[username][username][username][username]] b[username]ild
```
#### 2. PWA Not Upd[[username][username][username][username]]ti[[username][username][username][username]]g
```b[[username][username][username][username]][username]h
# Cl[[username][username][username][username]][[username][username][username][username]][username] [username][[username][username][username][username]][username]vic[[username][username][username][username]] wo[username]k[[username][username][username][username]][username] c[[username][username][username][username]]ch[[username][username][username][username]]
# I[[username][username][username][username]] b[username]ow[username][[username][username][username][username]][username] D[[username][username][username][username]]vTool[username]: Applic[[username][username][username][username]]tio[[username][username][username][username]] > S[[username][username][username][username]][username]vic[[username][username][username][username]] Wo[username]k[[username][username][username][username]][username][username] > U[[username][username][username][username]][username][[username][username][username][username]]gi[username]t[[username][username][username][username]][username]
# Th[[username][username][username][username]][[username][username][username][username]] h[[username][username][username][username]][username]d [username][[username][username][username][username]]f[username][[username][username][username][username]][username]h: Ct[username]l+Shift+R (Wi[[username][username][username][username]]dow[username]) o[username] C[[username][username][username][username]]d+Shift+R (M[[username][username][username][username]]c)
```
#### 3. I[[username][username][username][username]][[username][username][username][username]]g[[username][username][username][username]][username] Not Lo[[username][username][username][username]]di[[username][username][username][username]]g
Ch[[username][username][username][username]]ck `vit[[username][username][username][username]].co[[username][username][username][username]]fig.t[username]` b[[username][username][username][username]][username][[username][username][username][username]] p[[username][username][username][username]]th [[username][username][username][username]][[username][username][username][username]]tch[[username][username][username][username]][username] yo[username][username] d[[username][username][username][username]]ploy[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]t URL:
```typ[[username][username][username][username]][username]c[username]ipt
[[username][username][username][username]]xpo[username]t d[[username][username][username][username]]f[[username][username][username][username]][username]lt d[[username][username][username][username]]fi[[username][username][username][username]][[username][username][username][username]]Co[[username][username][username][username]]fig({
b[[username][username][username][username]][username][[username][username][username][username]]: '/foodi[[username][username][username][username]]/', // M[username][username]t [[username][username][username][username]][[username][username][username][username]]tch GitH[username]b [username][[username][username][username][username]]po [[username][username][username][username]][[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]
});
```
#### 4. i18[[username][username][username][username]] T[username][[username][username][username][username]][[username][username][username][username]][username]l[[username][username][username][username]]tio[[username][username][username][username]][username] Not Lo[[username][username][username][username]]di[[username][username][username][username]]g
E[[username][username][username][username]][username][username][username][[username][username][username][username]] t[username][[username][username][username][username]][[username][username][username][username]][username]l[[username][username][username][username]]tio[[username][username][username][username]] fil[[username][username][username][username]][username] [[username][username][username][username]][username][[username][username][username][username]] i[[username][username][username][username]] `p[username]blic/loc[[username][username][username][username]]l[[username][username][username][username]][username]/{l[[username][username][username][username]][[username][username][username][username]]g}/t[username][[username][username][username][username]][[username][username][username][username]][username]l[[username][username][username][username]]tio[[username][username][username][username]].j[username]o[[username][username][username][username]]`, [[username][username][username][username]]ot i[[username][username][username][username]] `[username][username]c/`.
---
## Co[[username][username][username][username]]t[username]ib[username]ti[[username][username][username][username]]g
### How to Co[[username][username][username][username]]t[username]ib[username]t[[username][username][username][username]]
1. **Fo[username]k** th[[username][username][username][username]] [username][[username][username][username][username]]po[username]ito[username]y
2. **C[username][[username][username][username][username]][[username][username][username][username]]t[[username][username][username][username]]** [[username][username][username][username]] f[[username][username][username][username]][[username][username][username][username]]t[username][username][[username][username][username][username]] b[username][[username][username][username][username]][[username][username][username][username]]ch: `git ch[[username][username][username][username]]cko[username]t -b f[[username][username][username][username]][[username][username][username][username]]t[username][username][[username][username][username][username]]/[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]zi[[username][username][username][username]]g-f[[username][username][username][username]][[username][username][username][username]]t[username][username][[username][username][username][username]]`
3. **Co[[username][username][username][username]][[username][username][username][username]]it** yo[username][username] ch[[username][username][username][username]][[username][username][username][username]]g[[username][username][username][username]][username]: `git co[[username][username][username][username]][[username][username][username][username]]it -[[username][username][username][username]] 'Add [[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]zi[[username][username][username][username]]g f[[username][username][username][username]][[username][username][username][username]]t[username][username][[username][username][username][username]]'`
4. **P[username][username]h** to th[[username][username][username][username]] b[username][[username][username][username][username]][[username][username][username][username]]ch: `git p[username][username]h o[username]igi[[username][username][username][username]] f[[username][username][username][username]][[username][username][username][username]]t[username][username][[username][username][username][username]]/[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]zi[[username][username][username][username]]g-f[[username][username][username][username]][[username][username][username][username]]t[username][username][[username][username][username][username]]`
5. **Op[[username][username][username][username]][[username][username][username][username]]** [[username][username][username][username]] P[username]ll R[[username][username][username][username]]q[username][[username][username][username][username]][username]t
### Co[[username][username][username][username]]t[username]ib[username]tio[[username][username][username][username]] G[username]id[[username][username][username][username]]li[[username][username][username][username]][[username][username][username][username]][username]
- Follow [[username][username][username][username]]xi[username]ti[[username][username][username][username]]g cod[[username][username][username][username]] [username]tyl[[username][username][username][username]]
- Add t[[username][username][username][username]][username]t[username] fo[username] [[username][username][username][username]][[username][username][username][username]]w f[[username][username][username][username]][[username][username][username][username]]t[username][username][[username][username][username][username]][username]
- Upd[[username][username][username][username]]t[[username][username][username][username]] doc[username][[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]t[[username][username][username][username]]tio[[username][username][username][username]]
- E[[username][username][username][username]][username][username][username][[username][username][username][username]] [[username][username][username][username]]ll t[[username][username][username][username]][username]t[username] p[[username][username][username][username]][username][username]
- U[username][[username][username][username][username]] [username][[username][username][username][username]][[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]tic co[[username][username][username][username]][[username][username][username][username]]it [[username][username][username][username]][[username][username][username][username]][username][username][[username][username][username][username]]g[[username][username][username][username]][username]
### Addi[[username][username][username][username]]g R[[username][username][username][username]]cip[[username][username][username][username]][username]
U[username][[username][username][username][username]] th[[username][username][username][username]] i[[username][username][username][username]]-[[username][username][username][username]]pp [username][[username][username][username][username]]cip[[username][username][username][username]] co[[username][username][username][username]]t[username]ib[username]tio[[username][username][username][username]] wiz[[username][username][username][username]][username]d fo[username] th[[username][username][username][username]] b[[username][username][username][username]][username]t [[username][username][username][username]]xp[[username][username][username][username]][username]i[[username][username][username][username]][[username][username][username][username]]c[[username][username][username][username]]. It will:
- V[[username][username][username][username]]lid[[username][username][username][username]]t[[username][username][username][username]] yo[username][username] [username][[username][username][username][username]]cip[[username][username][username][username]]
- G[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]][username][[username][username][username][username]]t[[username][username][username][username]] p[username]op[[username][username][username][username]][username] JSON
- C[username][[username][username][username][username]][[username][username][username][username]]t[[username][username][username][username]] [[username][username][username][username]] PR [[username][username][username][username]][username]to[[username][username][username][username]][[username][username][username][username]]tic[[username][username][username][username]]lly
---
## M[[username][username][username][username]]i[[username][username][username][username]]t[[username][username][username][username]]i[[username][username][username][username]][[username][username][username][username]][username] Not[[username][username][username][username]][username]
### Addi[[username][username][username][username]]g [[username][username][username][username]] N[[username][username][username][username]]w L[[username][username][username][username]][[username][username][username][username]]g[username][[username][username][username][username]]g[[username][username][username][username]]
1. Add l[[username][username][username][username]][[username][username][username][username]]g[username][[username][username][username][username]]g[[username][username][username][username]] cod[[username][username][username][username]] to `[username][username]c/i18[[username][username][username][username]].t[username]`:
```typ[[username][username][username][username]][username]c[username]ipt
[username][username]ppo[username]t[[username][username][username][username]]dL[[username][username][username][username]]g[username]: ['[[username][username][username][username]][[username][username][username][username]]', '[[username][username][username][username]][username]', 'f[username]', 'd[[username][username][username][username]]'],
```
2. C[username][[username][username][username][username]][[username][username][username][username]]t[[username][username][username][username]] t[username][[username][username][username][username]][[username][username][username][username]][username]l[[username][username][username][username]]tio[[username][username][username][username]] fil[[username][username][username][username]]: `p[username]blic/loc[[username][username][username][username]]l[[username][username][username][username]][username]/d[[username][username][username][username]]/t[username][[username][username][username][username]][[username][username][username][username]][username]l[[username][username][username][username]]tio[[username][username][username][username]].j[username]o[[username][username][username][username]]`
3. Upd[[username][username][username][username]]t[[username][username][username][username]] `M[username]ltiL[[username][username][username][username]][[username][username][username][username]]gT[[username][username][username][username]]xt` i[[username][username][username][username]]t[[username][username][username][username]][username]f[[username][username][username][username]]c[[username][username][username][username]] i[[username][username][username][username]] `[username][username]c/typ[[username][username][username][username]][username]/i[[username][username][username][username]]d[[username][username][username][username]]x.t[username]`:
```typ[[username][username][username][username]][username]c[username]ipt
i[[username][username][username][username]]t[[username][username][username][username]][username]f[[username][username][username][username]]c[[username][username][username][username]] M[username]ltiL[[username][username][username][username]][[username][username][username][username]]gT[[username][username][username][username]]xt {
[[username][username][username][username]][[username][username][username][username]]: [username]t[username]i[[username][username][username][username]]g;
[[username][username][username][username]][username]: [username]t[username]i[[username][username][username][username]]g;
f[username]: [username]t[username]i[[username][username][username][username]]g;
d[[username][username][username][username]]: [username]t[username]i[[username][username][username][username]]g;
}
```
4. Add [username][[username][username][username][username]]cip[[username][username][username][username]][username]/i[[username][username][username][username]]g[username][[username][username][username][username]]di[[username][username][username][username]][[username][username][username][username]]t[username] i[[username][username][username][username]] [[username][username][username][username]][[username][username][username][username]]w l[[username][username][username][username]][[username][username][username][username]]g[username][[username][username][username][username]]g[[username][username][username][username]]
### R[[username][username][username][username]]vi[[username][username][username][username]]wi[[username][username][username][username]]g R[[username][username][username][username]]cip[[username][username][username][username]] PR[username]
Ch[[username][username][username][username]]ck:
- [ ] JSON [username]ch[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]] v[[username][username][username][username]]lid ([[username][username][username][username]][username]to[[username][username][username][username]][[username][username][username][username]]t[[username][username][username][username]]d)
- [ ] N[username]t[username]itio[[username][username][username][username]] v[[username][username][username][username]]l[username][[username][username][username][username]][username] [username][[username][username][username][username]][[username][username][username][username]][username]o[[username][username][username][username]][[username][username][username][username]]bl[[username][username][username][username]]
- [ ] I[[username][username][username][username]][username]t[username][username]ctio[[username][username][username][username]][username] cl[[username][username][username][username]][[username][username][username][username]][username] [[username][username][username][username]][[username][username][username][username]]d [[username][username][username][username]][username][[username][username][username][username]]b[[username][username][username][username]][username][[username][username][username][username]]d
- [ ] I[[username][username][username][username]][[username][username][username][username]]g[[username][username][username][username]] [[username][username][username][username]]pp[username]op[username]i[[username][username][username][username]]t[[username][username][username][username]] ([[username][username][username][username]]o copy[username]ight[[username][username][username][username]]d co[[username][username][username][username]]t[[username][username][username][username]][[username][username][username][username]]t)
- [ ] No d[username]plic[[username][username][username][username]]t[[username][username][username][username]] [username][[username][username][username][username]]cip[[username][username][username][username]]
- [ ] All 3 l[[username][username][username][username]][[username][username][username][username]]g[username][[username][username][username][username]]g[[username][username][username][username]][username] p[username][[username][username][username][username]][username][[username][username][username][username]][[username][username][username][username]]t [[username][username][username][username]][[username][username][username][username]]d [[username][username][username][username]]cc[username][username][[username][username][username][username]]t[[username][username][username][username]]
### D[[username][username][username][username]]ploy[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]t
P[username][username]h to `[[username][username][username][username]][[username][username][username][username]]i[[username][username][username][username]]` b[username][[username][username][username][username]][[username][username][username][username]]ch t[username]igg[[username][username][username][username]][username][username] [[username][username][username][username]][username]to[[username][username][username][username]][[username][username][username][username]]tic d[[username][username][username][username]]ploy[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]]t vi[[username][username][username][username]] GitH[username]b Actio[[username][username][username][username]][username]. No [[username][username][username][username]][[username][username][username][username]][[username][username][username][username]][username][[username][username][username][username]]l [username]t[[username][username][username][username]]p[username] [username][[username][username][username][username]]q[username]i[username][[username][username][username][username]]d.
---
## Lic[[username][username][username][username]][[username][username][username][username]][username][[username][username][username][username]]
MIT Lic[[username][username][username][username]][[username][username][username][username]][username][[username][username][username][username]] - [username][[username][username][username][username]][[username][username][username][username]] LICENSE fil[[username][username][username][username]] fo[username] d[[username][username][username][username]]t[[username][username][username][username]]il[username].
---
## Co[[username][username][username][username]]t[[username][username][username][username]]ct
- **I[username][username][username][[username][username][username][username]][username]**: http[username]://gith[username]b.co[[username][username][username][username]]/[[username][username][username][username]][username]t[[username][username][username][username]][[username][username][username][username]]iop[[username][username][username][username]]dill[[username][username][username][username]]/foodi[[username][username][username][username]]/i[username][username][username][[username][username][username][username]][username]
- **Di[username]c[username][username][username]io[[username][username][username][username]][username]**: http[username]://gith[username]b.co[[username][username][username][username]]/[[username][username][username][username]][username]t[[username][username][username][username]][[username][username][username][username]]iop[[username][username][username][username]]dill[[username][username][username][username]]/foodi[[username][username][username][username]]/di[username]c[username][username][username]io[[username][username][username][username]][username]
- **E[[username][username][username][username]][[username][username][username][username]]il**: foodi[[username][username][username][username]]@[[username][username][username][username]]x[[username][username][username][username]][[username][username][username][username]]pl[[username][username][username][username]].co[[username][username][username][username]]
---
**G[[username][username][username][username]][[username][username][username][username]][[username][username][username][username]][username][[username][username][username][username]]t[[username][username][username][username]]d with Cl[[username][username][username][username]][username]d[[username][username][username][username]] Cod[[username][username][username][username]]** - A[[username][username][username][username]]th[username]opic'[username] AI-pow[[username][username][username][username]][username][[username][username][username][username]]d codi[[username][username][username][username]]g [[username][username][username][username]][username][username]i[username]t[[username][username][username][username]][[username][username][username][username]]t
L[[username][username][username][username]][username]t [username]pd[[username][username][username][username]]t[[username][username][username][username]]d: 2025-01-10
Project: Foodie - Comprehensive Meal Planning Web Application Version: 1.0.0 Last Updated: 2025-01-10 Tech Stack: React 18, TypeScript, Vite 5, Tailwind CSS, Firebase (optional), GitHub Pages
Foodie is a Progressive Web Application (PWA) designed to help users plan meals, discover recipes, generate shopping lists, and manage their pantry. The app supports multiple languages (English, Spanish, French) and multiple cuisines, making it truly global.
┌─────────────────────────────────────────────────────────┐ │ User Interface (React) │ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌─────────┐│ │ │ Pages │ │Components│ │ Layouts │ │ Routing ││ │ └────┬─────┘ └────┬─────┘ └────┬─────┘ └────┬────┘│ └───────┼────────────┼──────────────┼──────────────┼─────┘ │ │ │ │ ┌───────▼────────────▼──────────────▼──────────────▼─────┐ │ Context API (State Management) │ │ ┌──────┐ ┌──────┐ ┌─────────┐ ┌──────┐ ┌───────────┐ │ │ │Recipe│ │Planner│ │Shopping│ │ Auth │ │ Language │ │ │ └──────┘ └──────┘ └─────────┘ └──────┘ └───────────┘ │ └────────┬────────────────────────────────────────┬──────┘ │ │ ┌────────▼────────────────────────────────────────▼──────┐ │ Services Layer │ │ ┌──────────┐ ┌──────────┐ ┌───────────┐ ┌───────┐│ │ │ Recipe │ │Firebase │ │ GitHub │ │ Utils ││ │ │ Service │ │ Service │ │ API │ │ ││ │ └──────────┘ └──────────┘ └───────────┘ └───────┘│ └────────┬────────────────────────────────────────┬──────┘ │ │ ┌────────▼────────────────────────────────────────▼──────┐ │ Data Layer │ │ ┌──────────┐ ┌──────────────┐ ┌──────────────────┐│ │ │JSON Files│ │ LocalStorage │ │ Firebase/Firestore││ │ │(Static) │ │ (Offline) │ │ (Cloud Sync) ││ │ └──────────┘ └──────────────┘ └──────────────────┘│ └─────────────────────────────────────────────────────────┘
class strategyfoodie/ ├── public/ # Static assets │ ├── images/ # Image assets │ │ ├── recipes/ # Recipe photos │ │ ├── ingredients/ # Ingredient photos │ │ ├── icons/ # PWA icons │ │ └── placeholders/ # Placeholder images │ ├── locales/ # Translation files │ │ ├── en/translation.json │ │ ├── es/translation.json │ │ └── fr/translation.json │ └── manifest.webmanifest # PWA manifest │ ├── src/ │ ├── components/ # React components │ │ ├── common/ # Reusable UI components │ │ ├── layout/ # Layout components (Header, Footer) │ │ ├── recipe/ # Recipe-related components │ │ ├── planner/ # Meal planner components │ │ ├── shopping/ # Shopping list components │ │ ├── contribute/ # Recipe contribution wizard │ │ ├── auth/ # Authentication components │ │ └── pantry/ # Pantry management components │ │ │ ├── contexts/ # React Context providers │ │ ├── AppContext.tsx # App-wide settings │ │ ├── ThemeContext.tsx # Dark/light theme │ │ ├── LanguageContext.tsx # i18n language state │ │ ├── AuthContext.tsx # User authentication │ │ ├── RecipeContext.tsx # Recipe data & filters │ │ ├── PlannerContext.tsx # Meal planning state │ │ └── ShoppingContext.tsx # Shopping list state │ │ │ ├── hooks/ # Custom React hooks │ │ ├── useRecipes.ts # Recipe operations │ │ ├── useMealPlans.ts # Meal plan operations │ │ ├── useLocalStorage.ts # LocalStorage wrapper │ │ ├── useDebounce.ts # Debounce hook │ │ └── useMediaQuery.ts # Responsive design hook │ │ │ ├── utils/ # Utility functions │ │ ├── calculations.ts # Nutrition, cost calculations │ │ ├── unitConversions.ts # Unit conversion logic │ │ ├── nutritionEstimator.ts # Nutrition estimation │ │ ├── githubAPI.ts # GitHub API wrapper │ │ ├── firebaseAPI.ts # Firebase operations │ │ ├── storage.ts # LocalStorage utilities │ │ ├── validation.ts # Form & data validation │ │ └── formatting.ts # Date, number formatting │ │ │ ├── services/ # Business logic services │ │ ├── recipeService.ts # Recipe CRUD operations │ │ ├── ingredientService.ts # Ingredient operations │ │ ├── plannerService.ts # Meal planning logic │ │ └── shoppingService.ts # Shopping list generation │ │ │ ├── data/ # Static data (JSON) │ │ ├── recipes.json # Recipe database │ │ ├── ingredients.json # Ingredient database │ │ ├── categories.json # Categories & taxonomies │ │ └── config.json # App configuration │ │ │ ├── schemas/ # JSON schemas for validation │ │ ├── recipe.schema.json │ │ ├── ingredient.schema.json │ │ └── mealPlan.schema.json │ │ │ ├── pages/ # Page components │ │ ├── HomePage.tsx │ │ ├── RecipesPage.tsx │ │ ├── RecipeDetailPage.tsx │ │ ├── PlannerPage.tsx │ │ ├── ShoppingListPage.tsx │ │ ├── ContributePage.tsx │ │ ├── PantryPage.tsx │ │ ├── ProfilePage.tsx │ │ └── NotFoundPage.tsx │ │ │ ├── types/ # TypeScript type definitions │ │ └── index.ts # All type definitions │ │ │ ├── styles/ # Global styles │ │ └── globals.css # Tailwind + custom styles │ │ │ ├── App.tsx # Root component │ ├── main.tsx # Entry point │ └── i18n.ts # i18next configuration │ ├── .github/ │ └── workflows/ # GitHub Actions │ ├── deploy.yml # Deploy to GitHub Pages │ ├── validate-recipe-pr.yml # Validate recipe PRs │ └── lighthouse-ci.yml # Performance testing │ ├── scripts/ # Build & utility scripts │ ├── validateJSON.js # JSON schema validation │ └── generateSitemap.js # Sitemap generation │ ├── tests/ # Test files │ ├── unit/ # Unit tests │ ├── integration/ # Integration tests │ └── e2e/ # End-to-end tests │ ├── package.json ├── tsconfig.json ├── vite.config.ts ├── tailwind.config.js ├── .env.example ├── README.md └── CLAUDE.md # This file
interface Recipe { id: string; name: MultiLangText; // EN, ES, FR description: MultiLangText; type: string; // breakfast, lunch, dinner, snack, dessert cuisine: string[]; // mediterranean, mexican, etc. prepTime: number; // minutes cookTime: number; totalTime: number; servings: number; difficulty: 'easy' | 'medium' | 'hard'; tags: string[]; // gluten-free, vegan, etc. dietaryLabels: DietaryLabels; nutrition: NutritionInfo; ingredients: RecipeIngredient[]; instructions: RecipeInstruction[]; tips?: MultiLangText; equipment: string[]; imageUrl?: string; author?: string; dateAdded: string; rating: number; reviewCount: number; }
interface Ingredient { id: string; name: MultiLangText; category: string; // protein, vegetables, etc. unit: string; // piece, cup, lb, etc. avgPrice: number; currency: string; region: string; tags: { glutenFree: boolean; vegan: boolean; vegetarian: boolean; dairyFree: boolean; nutFree: boolean; kosher: boolean; halal: boolean; }; alternatives: string[]; seasonality: string[]; storageInstructions: MultiLangText; }
interface MealPlan { id: string; name: MultiLangText; description: MultiLangText; servings: number; dietaryRestrictions: string[]; difficulty: string; estimatedCost: number; currency: string; days: PlanDay[]; // 7 days typically tags: string[]; isPublic: boolean; shareToken?: string; }
We use React Context API with separate contexts for different concerns:
Located in
public/locales/{lang}/translation.json:
{ "app": { "name": "Foodie", "tagline": "Your Personal Meal Planning Assistant" }, "nav": { "home": "Home", "recipes": "Recipes", ... } }
import { useTranslation } from 'react-i18next'; function MyComponent() { const { t } = useTranslation(); return <h1>{t('app.name')}</h1>; }
Recipes, ingredients, and categories use
MultiLangText:
interface MultiLangText { en: string; es: string; fr: string; } // Usage const recipeName: MultiLangText = { en: "Scrambled Eggs", es: "Huevos Revueltos", fr: "Œufs Brouillés" };
Use
LanguageContext.getTranslated(text) to get current language version.
Configured via
vite-plugin-pwa:
// vite.config.ts VitePWA({ registerType: 'autoUpdate', workbox: { globPatterns: ['**/*.{js,css,html,ico,png,svg,json}'], runtimeCaching: [ { urlPattern: /^https:\/\/fonts\.googleapis\.com\/.*/i, handler: 'CacheFirst', }, { urlPattern: /^https:\/\/firebasestorage\.googleapis\.com\/.*/i, handler: 'CacheFirst', } ] } })
public/manifest.webmanifest:
{ "name": "Foodie - Meal Planner", "short_name": "Foodie", "theme_color": "#10b981", "display": "standalone", "start_url": "/", "icons": [...] }
// In contribution wizard import { Octokit } from '@octokit/rest'; const octokit = new Octokit({ auth: userGitHubToken }); // Fork repo const fork = await octokit.repos.createFork({ owner: 'your-org', repo: 'foodie' }); // Create branch, commit, PR...
## New Recipe Submission **Recipe**: {{name}} **Submitted by**: @{{username}} ### Checklist - [ ] JSON schema valid - [ ] All required fields present - [ ] Nutrition info reasonable - [ ] Instructions clear - [ ] Image appropriate - [ ] No duplicate recipe
# Clone repository git clone https://github.com/artemiopadilla/foodie.git cd foodie # Install dependencies npm install # Copy environment variables cp .env.example .env # Start development server npm run dev
{ "dev": "vite", // Start dev server "build": "tsc && vite build", // Production build "preview": "vite preview", // Preview production build "lint": "eslint .", // Run ESLint "test": "vitest", // Run unit tests "test:e2e": "playwright test", // Run E2E tests "validate:json": "node scripts/validateJSON.js" // Validate JSON files }
RecipeCard.tsx)calculateTotalCost)MAX_SERVINGS).tsx.ts.cssDeployed automatically via GitHub Actions:
# .github/workflows/deploy.yml name: Deploy to GitHub Pages on: push: branches: [main] jobs: build-and-deploy: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 - run: npm ci - run: npm run build - uses: actions/deploy-pages@v4
Configured in
vite.config.ts:
export default defineConfig({ base: '/foodie/', // Replace with your repo name ... });
CNAME file to public/ directoryTest utilities, hooks, and pure functions:
// utils/unitConversions.test.ts import { convertUnit } from './unitConversions'; describe('convertUnit', () => { it('converts cups to ml', () => { expect(convertUnit(1, 'cup', 'ml')).toBe(240); }); });
Test component interactions:
// RecipeCard.test.tsx import { render, screen } from '@testing-library/react'; import RecipeCard from './RecipeCard'; test('displays recipe name', () => { const recipe = { name: { en: 'Test Recipe' }, ... }; render(<RecipeCard recipe={recipe} />); expect(screen.getByText('Test Recipe')).toBeInTheDocument(); });
Test critical user flows:
// tests/e2e/meal-planner.spec.ts test('create meal plan', async ({ page }) => { await page.goto('/planner'); await page.click('text=Create New Plan'); await page.fill('input[name="planName"]', 'My Plan'); await page.click('text=Save'); await expect(page.locator('text=My Plan')).toBeVisible(); });
Target scores:
# Clear cache and reinstall rm -rf node_modules package-lock.json npm install npm run build
# Clear service worker cache # In browser DevTools: Application > Service Workers > Unregister # Then hard refresh: Ctrl+Shift+R (Windows) or Cmd+Shift+R (Mac)
Check
vite.config.ts base path matches your deployment URL:
export default defineConfig({ base: '/foodie/', // Must match GitHub repo name });
Ensure translation files are in
public/locales/{lang}/translation.json, not in src/.
git checkout -b feature/amazing-featuregit commit -m 'Add amazing feature'git push origin feature/amazing-featureUse the in-app recipe contribution wizard for the best experience. It will:
Add language code to
src/i18n.ts:
supportedLngs: ['en', 'es', 'fr', 'de'],
Create translation file:
public/locales/de/translation.json
Update
MultiLangText interface in src/types/index.ts:
interface MultiLangText { en: string; es: string; fr: string; de: string; }
Add recipes/ingredients in new language
Check:
Push to
main branch triggers automatic deployment via GitHub Actions. No manual steps required.
MIT License - see LICENSE file for details.
Generated with Claude Code - Anthropic's AI-powered coding assistant Last updated: 2025-01-10