Front End
There are two routes to a user interface here, and the site covers both without pretending one is correct.
The first is the real one: HTML, CSS, JavaScript, then a framework, a bundler, a linter, and a build step. The second is to skip it, and let a Python library generate the interface. That is the right answer more often than front-end developers like to admit, particularly for a dashboard or a model demo, which is most of what gets built in this collection.
Before either route there is a third thing, which is deciding what the interface should be at all. The design pages below cover that, and they are the only part of this site that is not about a tool.
Nearly every page assumes a Django REST Framework backend, because that is what these interfaces are put in front of. See Back End for that half.
Design: UI and UX
Twelve pages on designing the interface rather than building it, ordered the way the work runs: understand people, structure the content, design the behaviour, then the surface, then evaluate it. Every page ends with a section on how that discipline fails in practice, which is usually the fastest part to read.
Understanding users and content
| Page | Covers |
|---|---|
| UX Research | Interviews, contextual inquiry, surveys, diary studies, affinity mapping, personas and jobs-to-be-done, journey maps, and how many participants is enough |
| Information Architecture | Content inventory, organisation schemes, the four navigation models, labelling, card sorting, tree testing, search, and URLs as interface |
Designing behaviour and surface
| Page | Covers |
|---|---|
| Interaction Design | Flows, the eight screen states nobody designs, affordances and signifiers, feedback timing, forms, progressive disclosure, undo over confirmation, and Nielsen’s ten heuristics |
| Visual Design Foundations | Hierarchy, grids, the spacing scale, type scale and measure, colour as roles rather than a palette, Gestalt grouping, elevation, and icons |
| Design Systems and Tokens | The three token tiers, naming by role, one source of truth to many platforms, theming light and dark, component API design, versioning, and when not to build a system |
| Responsive and Multiplatform | Content-driven breakpoints, fluid type with clamp(), container queries, touch versus pointer versus keyboard, platform conventions, density, internationalisation and right-to-left |
| Content Design and Motion | Voice and tone, microcopy, error messages that say what to do, empty states, readability, then animation duration and easing, and perceived performance |
Constraints and validation
| Page | Covers |
|---|---|
| Accessibility | WCAG 2.2 AA, POUR, semantic HTML over ARIA, keyboard and focus management, accessible names and live regions, contrast, the 2.2 additions, alt text, and how to test |
| Prototyping and Handoff | Choosing fidelity, wireframing with real content, Figma auto layout, variants and variables, what a developer actually needs, and design QA |
| Usability Evaluation | Heuristic evaluation, running a session, writing tasks that do not leak the answer, facilitating without helping, severity rating, and testing with disabled participants |
| Measurement and Experimentation | Event schema design, funnels, session replay and heatmaps, A/B testing and its limits, HEART, Core Web Vitals, SUS and NPS, and the usual statistical traps |
| Process and Ethics | The double diamond, dual-track delivery, design ops, the dark pattern catalogue and why it is now a legal question, consent and privacy, and inclusive design |
Skipping the Front End
Python libraries that generate the interface, ordered by how much control they give up.
| Page | Covers |
|---|---|
| Streamlit | The most detailed of these. A script becomes a web app, which is why it wins for internal tools |
| Gradio | The same idea aimed at model demos, an input, an output, and a shareable link |
| Plotly Dash | Flask, Plotly.js, and React underneath, exposed as Python. More work than Streamlit, more control in return |
| fastHTML | HTML generated from Python, without the JavaScript layer |
| Grafana | Moved to IaaS, alongside the rest of the observability stack |
The Web Platform
| Page | Covers |
|---|---|
| HTML | The markup itself |
| CSS | Styling |
| Bootstrap | The CSS and JavaScript component framework that saves writing most of it |
| SVG | Vector graphics in the browser, at length |
| Markdown | The lightweight markup behind most documentation, including this site |
| HTTP Headers | Message headers, how Nginx sets them, and CORS, which is the one that breaks a front end against an API |
JavaScript and Its Toolchain
| Page | Covers |
|---|---|
| JavaScript | Writing the front end against a DRF API |
| Fetch API | Promise-based HTTP requests, replacing XMLHttpRequest |
| jQuery | The older way, still met in existing code |
| TypeScript | Optional static typing over JavaScript, compiling back down to it |
| Node | JavaScript on the server, its core concepts and ecosystem |
| npm | Dependency management for all of the above |
| Webpack | Bundling code, styles, and assets into what the browser actually loads |
| Prettier | Opinionated formatting across JS, TS, HTML, CSS, and JSON |
| ESLint | Linting, for the errors formatting cannot catch |
| Highcharts | Charting driven from a DRF endpoint |
| DataTables | Sortable, searchable tables |
| SurveyJS | The JSON format for defining forms and surveys |
React
| Page | Covers |
|---|---|
| React Overview | Fundamentals through to modern patterns and ecosystem tooling |
| React Setup | Getting a project running |
| React Init | The initial scaffold |
| React Libraries | The npm add-ons worth knowing, grouped by what they do |
| React and Django | The full-stack pairing: project structure, how the two halves communicate, deployment, and practice |
| React with Docker | A production setup for Django, DRF, React, and PostgreSQL together, using multi-stage builds, Nginx for static files, and Compose to orchestrate it |
Flutter
The mobile and desktop route, where one codebase targets Android, iOS, Linux, Windows, and macOS.
| Page | Covers |
|---|---|
| Flutter Setup | Getting the toolchain working |
| Widgets | The framework’s whole model is that everything is a widget |
| Dart | The language underneath |
| Riverpod | State management |
Being Found and Measured
| Page | Covers |
|---|---|
| SEO | Split into three layers, of which a full-stack developer owns one completely, shares one, and should refuse the third |
| Website Metrics | Tracking traffic and behaviour through analytics, heatmaps, and log analysis |
| Google Analytics | Wiring GA into a Django project |
Not Covered Yet
- No Vue, Svelte, or Angular. React is the only JavaScript framework covered.
- No testing. Neither component testing nor browser automation appears anywhere.
- Nothing on state management in React specifically. Riverpod covers it for Flutter, but Redux, Zustand, and the modern alternatives are absent.
- Four stubs at two to three cells: React Init, Fetch API, jQuery, and Google Analytics.
- No build-level performance page. Bundle size and code splitting go unmentioned even though Webpack has a page. Core Web Vitals are covered as a design constraint in Responsive and Multiplatform and Measurement and Experimentation, but not as a build concern.
- No worked design example. The design pages are principles and mechanics; none of them takes one screen from research through to built component.