Skip to content
portfolio

// case study

AGAVI Website and LMS

Maintaining two Next.js apps for AGAVI, a food-industry consultancy: its corporate site and its training LMS, from upgrades and features to deploys and CI.

year
2025-now
type
Web app
stack
Next.js

AGAVI Institute homepage with the Food Industry Training headline over a laboratory photo

Since July 2025 I’ve maintained and extended two production Next.js apps for PT Agritama Sinergi Inovasi (AGAVI), an Indonesian food-industry consultancy. I took both over from the original developer and have handled everything since: framework upgrades, security patches, new features, deployments, and CI.

AGAVI Institute (institute.agavi.id) is a learning platform for food safety, R&D, and digital skills training. Learners buy courses with Midtrans, watch video lessons, take quizzes and post-tests, join discussions, and earn certificates. It serves students, facilitators, and admins.

  • Upgraded Next.js from 13 to 15 and kept it patched against security advisories
  • Built the certificate system: PDF certificates with QR codes, a public verification page, and certificates that unlock only after passing the post-test
  • Added sequential video lessons that unlock in order, and a rich-text editor with image uploads for course content
  • Added admin tools to hide and unhide courses, see enrollments, and filter users by role, and discussion and student counts for facilitators
  • Set up Sentry error monitoring and Mixpanel event tracking
  • Ran a hardening pass after my own code audit: security headers, a Content Security Policy that reports to Sentry, open-redirect fixes, sanitized rich text, and fixes for a race in token refresh

AGAVI Institute course catalog showing food service training courses with prices and add to cart buttons

The corporate site (agavi.id) presents AGAVI and its business units, with articles and products managed in the Builder.io CMS.

  • Upgraded Next.js from 13 to 16 with Tailwind CSS 4, patching security advisories along the way
  • Moved hosting to Railway with a config-as-code deploy (Nixpacks build, restart on failure) behind Cloudflare
  • Replaced timer-based page rebuilds with on-demand revalidation: an authenticated webhook from the CMS now refreshes only the article or product that changed, instead of about 75 pages on every cycle
  • Added a GitHub Actions quality gate on every pull request and push to main: ESLint, TypeScript, and a full production build
  • Wrote a pre-build check that catches missing or wrongly cased asset paths, which work on macOS but break on Linux servers
  • Converted images to WebP, removed 61 unused assets, and fixed accessibility issues from an audit

AGAVI corporate homepage with the AGAVI Innovation headline over a photo of a consultant reviewing documents

Tech Stack:

  • Next.js 15 and 16, React 19, Redux Toolkit, Tailwind CSS
  • Builder.io CMS, Midtrans
  • Railway, Vercel, Cloudflare, GitHub Actions
  • Sentry, Mixpanel, Google Analytics

Both sites are live at agavi.id and institute.agavi.id.