2 Resources
Othmane Ataallah edited this page 2026-07-23 14:15:16 +02:00
This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

Learning Resources

Curated for OUR stack — every dependency in the three projects has its reference here. Found something great? Add it (this is a wiki). Found a dead link? Fix it.

How to use this page (read first)

  1. Project docs beat external docs. Your repo's README.md + ARCHITECTURE.md answer "how do WE do it" — external links answer "how does the tool work". Read in that order.
  2. Three kinds of links: 🎓 Learn (sit down and do it once, early) · 📖 Reference (bookmark, open when stuck) · 🎥 Watch (background learning, commutes).
  3. Timebox learning. 🎓 items say roughly how long they deserve. You are paid to build with 70% understanding, not to reach 100% before starting — the issues are designed for that.
  4. The 30-minute rule applies to being stuck on docs too. And when you ask, ask well: How do I ask a good question? — what you tried, exact error, minimal example. (Same format as our bug template. Not a coincidence.)
  5. French speakers: OpenClassrooms and Grafikart mirror many fundamentals in French — fine as a first pass, but the canonical docs below stay the reference.

🧰 Everyone (shared foundations)

Resource Why
🎓 Learn Git Branching (23h, interactive) Branching/rebasing finally clicks — do levels 14 + "Moving work around"
🎓 Pro Git book — ch. 2 & 3 (2h) The mental model under our git-strategy.md
📖 Conventional Commits Our commit format, one page
📖 Dangit, Git!? "I did the wrong git thing" → the fix, recipe-style
🎓 MDN — HTTP overview (1h) Methods, headers, cookies — the vocabulary of our API
📖 MDN — HTTP status codes What 401 vs 403 vs 409 vs 422 mean (our spec uses them precisely)
🎓 JWT introduction (30min) What's inside our access tokens; paste one in the debugger
📖 learn.openapis.org + the API's own Swagger UI (/api/v1/swagger-ui.html, springdoc) Reading openapi.yaml fluently — it's the contract
🎓 PostgreSQL Tutorial (pick per need) + pgexercises (practice) SQL you'll actually meet; API dev goes deepest, everyone benefits
📖 PostgreSQL manual The authority when the tutorial isn't enough

API dev — Java 25 · Spring Boot 4.1 · PostgreSQL

Week-1 path (in order):

  1. 🎓 dev.java — Learn Java (refresh selectively: records, streams, optionals — 34h)
  2. 🎓 Spring Academy — free "Building a REST API with Spring Boot" course (46h; the single best Spring on-ramp)
  3. 🎓 Spring guide: Building REST services (1h, hands-on)
  4. 🎓 Our starter's auth code + tests (the code-tour issue) — with the Spring Security reference open beside it
  5. 🎓 Baeldung — Spring Boot series (skim the index; read per need)

The shelf — one row per thing in pom.xml:

Dependency Reference
Spring Boot 4.1 (web, validation) Boot reference docs · most tutorials online still show Boot 3 — for our usage they're ~identical; when something differs, check the Boot release notes/wiki
Spring Security + jjwt Security reference · Baeldung Security · jjwt README
Spring Data JPA / Hibernate Data JPA reference · Baeldung JPA · perf & N+1: Vlad Mihalcea
Flyway Flyway docs
MapStruct MapStruct reference — esp. "unmapped target policy"; our mappers live at the DTO edge
Lombok Feature list — we use the boring ones (@Getter/@Builder/@RequiredArgsConstructor); ask before exotic ones
springdoc-openapi springdoc.org — annotations that keep Swagger UI honest
Spring Data Redis Data Redis reference · Redis docs
WebSocket / STOMP Spring guide: STOMP messaging · Framework WebSocket reference
Mail + Thymeleaf (email templates) Baeldung: Spring email · Thymeleaf docs
AWS SDK S3 (MinIO) AWS SDK for Java v2 guide · MinIO docs (S3-compatible — same SDK, custom endpoint)
Testcontainers java.testcontainers.org + Boot's @ServiceConnection support in the Boot testing docs
Actuator Boot reference → Actuator chapter (health/metrics endpoints)

When stuck on… → look here:

Milestone problem Resource
M1M2 · error handling / @RestControllerAdvice Baeldung: error handling for REST
M2 · pagination & filtering Data JPA reference → Pageable/Specification · Baeldung: REST pagination
M3 · JPA relationships (assignments, comments, tags) Baeldung JPA relationship articles + Vlad on @ManyToMany pitfalls
M4 · dates, timezones, recurrence dev.java Date-Time trail · we store TIMESTAMPTZ + OffsetDateTime, always
M5 · overlap/conflict constraints PostgreSQL exclusion constraints (EXCLUDE USING gist) — issue API-33
M6 · slow queries / N+1 Vlad Mihalcea — N+1 detection & fixes

🎥 Background: Amigoscode (Spring Boot full courses) · Dan Vega (short, current Spring topics) · SpringDeveloper (official)


⚛️ Web dev — React 19 · TypeScript · Tailwind 4 · shadcn/ui

Week-1 path (in order):

  1. 🎓 react.dev — Learn (the "Describing/Adding Interactivity/Managing State" chapters — 46h; skip what you know)
  2. 🎓 TypeScript Handbook (23h) + 📖 React TypeScript Cheatsheet
  3. 🎓 TanStack Query — quick start + "Important defaults" (2h) then 📖 TkDodo's Practical React Query (the canonical deep dive — read over the first weeks)
  4. 🎓 Tailwind docs — core concepts (2h: utility-first, states, responsive) + how shadcn/ui components come into the repo (they're copied in, not installed — read "Introduction")
  5. 🎓 Our starter's api/client.ts + AuthContext with the README's auth-flow section

The shelf — one row per thing in package.json:

Dependency Reference
React 19 react.dev — reference tab for every hook
React Router 7 reactrouter.com
TanStack Query 5 tanstack.com/query · TkDodo's blog
zustand zustand docs — CLIENT state only; server data stays in Query (see ARCHITECTURE.md)
axios axios-http.com/docs — but go through OUR api/client.ts, never raw
react-hook-form + zod + @hookform/resolvers react-hook-form.com · zod.dev — schema per form, server details[] mapped to fields
Tailwind CSS 4 (+ tailwind-merge, tw-animate-css, prettier plugin) tailwindcss.com/docs
shadcn/ui + radix-ui + cva + clsx + lucide ui.shadcn.com · Radix primitives (a11y behavior under shadcn) · cva · lucide.dev
FullCalendar (react, daygrid, timegrid, list, interaction) fullcalendar.io/docs/react — M4's workhorse
dnd-kit docs.dndkit.com — task board drag & drop
recharts recharts.org — M6 dashboards
date-fns 4 date-fns.org — format at render time only
@stomp/stompjs + sockjs stomp-js docs — live notifications; topic names come from the API dev
motion · sonner · input-otp · fontsource motion.dev · sonner · input-otp · fontsource.org
openapi-typescript openapi-ts.devnpm run generate:api regenerates types from the spec; NEVER edit api.generated.ts by hand
vitest + Testing Library vitest.dev · testing-library.com
eslint + prettier + husky + lint-staged eslint.org · prettier.io · husky — pre-wired; format-on-save and forget

When stuck on… → look here:

Milestone problem Resource
M1 · layout/CSS fundamentals under Tailwind web.dev — Learn CSS · Josh Comeau's blog (flexbox/grid mental models)
M2 · complex forms & validation UX react-hook-form docs + zod; server-error mapping pattern in ARCHITECTURE.md §4
M3 · lists: filters, pagination, cache invalidation TanStack Query docs (paginated queries) + TkDodo on query keys
M4 · calendar views & date math FullCalendar react docs · date-fns
M4 · live notifications stomp-js docs + the API's WebSocket topic contract (ask, don't guess)
M6 · charts recharts examples gallery
JS fundamentals gap (closures, promises, async) javascript.info — best JS course on the internet, free

📱 Mobile dev — Flutter · Riverpod 3 · codegen

Week-1 path (in order):

  1. 🎓 Dart language docs (34h if Dart is new — null safety, futures/async, pattern matching)
  2. 🎓 Flutter docs — get started + first codelab (3h) · keep the cookbook bookmarked
  3. 🎓 Riverpod docs ("Getting started" → "Providers" → the annotation/codegen pages — 4h; this is our state management, learn it properly)
  4. 🎓 The codegen trio we use everywhere — freezed (models), json_serializable (fromJson), retrofit (API client) — (2h reading + keep dart run build_runner watch --delete-conflicting-outputs running while you code)
  5. 🎓 go_router (12h: routes, ShellRoute for the bottom nav, redirect for the auth guard)

The shelf — one row per group in pubspec.yaml:

Dependency Reference
flutter_riverpod + riverpod_annotation/generator riverpod.dev — providers, AsyncValue, codegen syntax
freezed + json_annotation/serializable + build_runner freezed · JSON serialization guide · build_runner
dio + retrofit + connectivity_plus dio · retrofit · connectivity_plus
go_router + app_links (deep links) go_router · Flutter deep linking · app_links
flutter_secure_storage + jwt_decoder + local_auth flutter_secure_storage · jwt_decoder · local_auth (biometrics)
firebase_core + firebase_messaging + flutter_local_notifications Firebase Flutter setup · FCM for Flutter · flutter_local_notifications
stomp_dart_client stomp_dart_client — in-app realtime; topic names from the API dev
drift (+ drift_dev) + shared_preferences drift docs (local DB) · shared_preferences
table_calendar · fl_chart table_calendar (M4 agenda) · fl_chart (M6 dashboards)
reactive_forms · omni_datetime_picker · input pickers reactive_forms · omni_datetime_picker · image_picker / file_picker / open_filex
infinite_scroll_pagination · flutter_slidable · reorderable_grid infinite_scroll_pagination (M3 lists) · flutter_slidable · reorderable_grid
UI polish: google_fonts, flutter_svg, cached_network_image, shimmer, flutter_animate, toastification their pub.dev pages — README + example tab is the doc
intl · dartz · dotenv · device/package_info intl · dartz (Either for errors — copy the pattern already in the codebase) · flutter_dotenv
Material 3 m3.material.io — the design language under our theme

When stuck on… → look here:

Milestone problem Resource
M1 · nav shell, auth guard go_router docs: ShellRoute + redirect
M1 · codegen "it won't generate" re-run dart run build_runner build --delete-conflicting-outputs; freezed README troubleshooting
M2 · forms & validation reactive_forms README (it's a full manual)
M3 · infinite lists + pull-to-refresh infinite_scroll_pagination + cookbook lists
M4 · calendar & dates table_calendar README · intl formatting
M4 · push notifications end-to-end FCM Flutter guide — and coordinate with the API dev (device-token registration needs an API endpoint — flag it, don't invent it)
Any · widget testing Flutter testing docs

🎥 Background: Flutter official channel — the Widget of the Week playlist (2-min videos, weirdly effective) · Riverpod author's site riverpod.dev has linked talks.


House rules for this page

  • Add anything that unblocked you (with one line saying when it's useful). Remove nothing without asking — someone may be mid-course.
  • Paid courses: ask the PM first — many of the above cover 95% free.
  • If a resource contradicts our ARCHITECTURE.md or agreements, the agreement wins — or open the discussion (ADR) if you think the resource is right.