Live platform Project record 02 Updated 18 Jul 2026

Corporate website · Content automation & performance

AGVN Digital Platform

A corporate agricultural website that turns editable spreadsheet content into product pages, news articles and locally managed image assets—without requiring a traditional CMS.

01 · Overview

A business website that non-technical editors can keep current.

AGVN needed more than a set of static pages. Product and news information had to remain editable without turning every content change into a manual coding task.

The resulting platform combines a static corporate website with a lightweight publishing engine. Content is maintained in Google Sheets, validated and transformed by a Node.js generator, then committed back to GitHub as deployable HTML and locally managed images.

This architecture keeps the public website fast and inexpensive while giving the business a familiar operational interface for ongoing updates.

02 · Operating model

Separate editable sources from generated outputs.

The system has a clear ownership model: humans edit structured data and templates; automation manages the repetitive output.

SOURCE

Google Sheets

Product and news records are edited in two dedicated spreadsheets using required headers and flexible column aliases.

Business editableTwo datasets
TEMPLATE

Reusable HTML templates

Product and news templates define the design, SEO structure and shared layout of generated pages.

Consistent UISEO control
ENGINE

Node.js generator

The generator fetches rows, validates fields, maps content, resolves slugs and writes output into product and news directories.

ValidationPage generation
ASSETS

Image normalization

Google Drive and remote image URLs can be downloaded, verified and stored under assets/generated-images.

Drive supportManifest
AUTOMATION

GitHub Actions

An hourly schedule and manual trigger run the generator, then commit only generated pages and image assets when changes exist.

HourlyManual run
DELIVERY

Static public website

The deployed result remains standard HTML, CSS, JavaScript and optimized assets—fast to serve and easy to inspect.

GitHub PagesLow overhead

03 · Publishing architecture

Multiple fallbacks protect a simple editing experience.

The system assumes spreadsheet names and image inputs may change, so discovery, validation and retry logic sit between content editing and deployment.

Node 20 · GitHub Actions
01

Discover sheets

Prefer configured gid, match known tab names, inspect discovered tabs, then fall back to the first tab.

Flexible input
02

Fetch with fallback

Try OpenSheet and Google GViz CSV sources with timeout and retry handling.

Resilient access
03

Validate headers

Confirm required fields such as product name, slug and news title before generating output.

Safer generation
04

Normalize images

Resolve Google Drive IDs, verify image responses, create deterministic filenames and update the manifest.

Stable assets
05

Generate pages

Merge row data into reusable product and news templates and write static HTML outputs.

Consistent pages
06

Commit changes

Stage generated directories and assets; skip the commit entirely when no output has changed.

Clean history
Google SheetsOpenSheet / GVizHeader validationgenerate.jsHTML + imagesGitHub Pages

04 · Key decisions

Automation succeeds when the source and output boundaries are explicit.

DR-01Accepted

Use Google Sheets instead of a traditional CMS

The business needed an editor-friendly workflow without introducing backend hosting, CMS maintenance or account management.

Why
Familiar editing, fast adoption and low operating overhead.
Trade-off
Headers and field discipline become part of the system contract.
DR-02Accepted

Generate static pages instead of rendering spreadsheet data in the browser

Product pages need stable URLs, crawlable content and predictable output even when the data source is temporarily unavailable.

Why
Stronger SEO, faster delivery and independence from runtime sheet availability.
Trade-off
Content changes wait for the next workflow run.
DR-03Expanded

Auto-detect spreadsheet tabs and validate headers

Hard-coded tab names made the sync fragile when sheets were renamed, reordered or expanded.

Why
Support gid, preferred names, discovered tabs and required-field checks.
Trade-off
The generator becomes more complex, but failures become more diagnosable.
DR-04Accepted

Download remote images into the repository

Editors may paste Google Drive links or other remote sources that are unsuitable for direct production use.

Why
Local assets create stable paths and remove dependency on fragile sharing URLs.
Trade-off
The repository stores generated binary assets and needs a manifest.
DR-05Accepted

Convert GitHub raw links to jsDelivr where appropriate

Direct raw asset delivery can create rate limits or inconsistent performance for a public website.

Why
CDN delivery improves caching and public asset reliability.
Trade-off
Cache invalidation and version references need attention.
DR-06Refined

Optimize mobile without removing core content

The first performance passes revealed heavy video, animation and external asset costs on mobile.

Why
Use lighter video behavior, non-blocking assets and desktop-only enhancement where appropriate.
Lesson
Performance fixes must preserve banners, product images, sheet sync and generated content.

05 · Performance and reliability

The fastest page is not useful if automation silently breaks it.

AGVN required two forms of reliability: the public website had to remain responsive, and the publishing workflow had to fail visibly instead of generating incorrect pages.

Delivery

Non-blocking external CSS

Fonts and icon styles were shifted away from the critical rendering path.

Animation

Desktop-only enhancement

AOS behavior was limited and paired with a failsafe so content remains visible if scripts fail.

Media

Lite video strategy

Heavy YouTube behavior was reduced on mobile while preserving the customer-proof section.

Images

WebP, CDN and local generation

Asset mapping and generated image storage reduce broken or slow external dependencies.

Data

Header validation before generation

The generator refuses invalid sources instead of overwriting working output with incomplete pages.

Workflow

No-change commits are skipped

Git history remains cleaner and scheduled runs do not create meaningless revisions.

06 · Lessons learned

A lightweight CMS still needs contracts, validation and ownership.

01

Edit sources, not generated files

Templates and spreadsheet rows are durable inputs. Generated product and news pages can be overwritten by design.

02

Flexible input must end in strict validation

Supporting many tab names and aliases is useful only when required fields are verified before output.

03

Image handling belongs in the publishing pipeline

Expecting every editor to provide production-ready URLs creates recurring breakage and support work.

04

Automation should preserve the last good state

Empty or invalid sheet data should not erase working pages during a scheduled run.

05

Performance changes must respect business content

Removing heavy code is useful; accidentally hiding proof, product content or navigation is not.

06

Static architecture can support real operations

With a disciplined generator and workflow, a static site can behave like a maintainable publishing product.

07 · Next priorities

Strengthen observability and content governance.

The core publishing engine works. The next improvements should make issues easier to detect and content quality easier to control.

KhaiTriOS roadmap
P1

Add a generation summary report

Record selected tabs, row counts, generated pages, skipped records, downloaded images and warnings.

Observability
P1

Formalize spreadsheet schema documentation

Publish required headers, accepted aliases and example rows for products and news.

Governance
P2

Add generated-output integrity checks

Verify canonical URLs, image paths, required metadata and broken internal links before committing.

QA
P2

Improve asset lifecycle management

Detect orphaned generated images and apply consistent size or format rules.

Assets
P3

Create content freshness indicators

Expose last successful sync and last content update where it helps editors and maintainers.

Operations

Project record status

Second encyclopedia record complete.

AGVN now has a durable public record covering its publishing architecture, automation decisions, performance work and operational lessons.

Back to all projects