Logo Lanfrica

jwtm2004/aftrak-irrigation-portfolio

Domain:

agriculture

Record type:

project
Creator:
jwt
Host:
Interactive case study of my MEng dissertation: an off-grid mobile dribble-bar irrigation prototype for smallholder farmers in Sub-Saharan Africa, built around the Aftrak AFT-e1 micro-tractor. # Off-Grid Mobile Irrigation — Portfolio Site Single-page interactive case study of my final-year MEng dissertation: a low-cost, trailer-mounted dribble-bar irrigation prototype for smallholder farmers in Sub-Saharan Africa, designed around the Aftrak AFT-e1 electric micro-tractor. Built with **Vite + React + TypeScript**, **Tailwind CSS**, **Framer Motion**, **Recharts** and two hand-rolled 2D canvas simulations (hydraulic flow + birds-eye field coverage). No backend — static build. ## Run locally ```bash npm install npm run dev # localhost ``` ## Build & deploy ```bash npm run build # outputs static site to dist/ npm run preview # serve the production build locally ``` Deploy `dist/` anywhere static: - **Vercel / Netlify** — import the repo, framework preset "Vite", build command `npm run build`, output directory `dist`. Done. - **GitHub Pages** — `vite.config.ts` already sets `base: "./"` so assets resolve on project pages. Push `dist/` to a `gh-pages` branch (e.g. `npx gh-pages -d dist`) or use a Pages GitHub Action. ## Adding the real images Drop assets into `public/assets/` using the paths listed in `src/data.ts` (`assets` object) — e.g. `public/assets/poster.png` — then replace the corresponding ` ` with a plain ` ` (the placeholder component documents exactly what belongs where). Layout is stable either way. ## Where the numbers live **Every** real data value on the site (flows, splits, coverages, event times, stress-buffering days, costs) is defined once in `src/data.ts`, with a comment citing the dissertation section/table it comes from. See `DATA_SOURCES.md` for the full audit list to sanity-check against the report. ## Project structure ``` src/ ├── data.ts # ← single source of truth for all real data ├── App.tsx # section order + nav registry ├── components/ │ ├── Nav.tsx # sticky nav, scroll progress, active section │ ├── Section.tsx / Reveal.tsx / ImagePlacehol …