Focused components
Base and demo layouts own page shells. Disclosure, navigation, breadcrumbs, service cards, service templates, and art-directed media each have a clear semantic responsibility.
Self-initiated frontend case study
Lumen Coast Energy is not a client or trading business. I created this concept to demonstrate how a polished small-business interface can remain accessible, technically disciplined, and explicit about what is fictional.
The brief
The design problem was deliberately awkward: create the clarity and depth expected from a home-energy website without inventing a customer, installation, review, accreditation, address, award, partner, or performance claim.
The result separates a real, indexable portfolio case study from seven crawlable but non-indexable fictional demo routes. Every demo page carries the same visible disclosure, and the estimator is presented as a synthetic comparison rather than a quote or recommendation.
Responsive implementation
These are real captures of the local production preview on 11 August 2026. They show the fictional demo homepage—not a design mockup or a live customer site.


Implementation approach
Shared configuration centralises routes, the exact fictional disclosure, service content, estimator defaults, and performance budgets before presentation is added.
Astro layouts provide metadata, landmarks, the shared demo shell, and optimized local images while sending HTML by default.
A small page-specific TypeScript module updates the estimator. The approved synthetic example remains readable without it.
Base and demo layouts own page shells. Disclosure, navigation, breadcrumbs, service cards, service templates, and art-directed media each have a clear semantic responsibility.
The three service routes read from one typed data structure, so navigation labels, metadata, cross-links, images, and limitations stay consistent without flattening their distinct content.
One Manrope WOFF2 subset and repository-owned raster assets are processed locally. Astro generates explicit dimensions and responsive AVIF/WebP candidates without runtime image services.
Accessibility decisions
Honest technical SEO
index,follow and is the only route included in the sitemap.noindex,follow and remain allowed in robots.txt so crawlers can read that directive.Local builds may use a portfolio.example origin. The deployed Pages build requires PUBLIC_SITE_URL and usesian-decesare-portfolio.pages.dev.
Estimator transparency
Four non-personal inputs run entirely in the browser. The interface validates number fields, explains invalid states beside the field, and never asks for contact or property-identifying information.
Monthly cost is multiplied by 12 and rounded to the nearest €10. Roof area is converted to a bounded factor capped at 35 m², then combined with daytime-use percentage in a bounded solar-reduction heuristic. Selecting battery adds a smaller fixed adjustment.
Identical inputs always return identical outputs. Unit tests lock the approved fixture, battery selection, invalid-number fallback, input boundaries, result ordering, and currency formatting.
Measured implementation evidence
Measurements below come from the local static build validator, a headless Chrome sweep, and one Lighthouse 13.4.1 mobile-mode run on 11 August 2026. A separate live Pages sweep passed all 60 route/viewport combinations with a 102.41 KB maximum pre-scroll transfer. These are lab measurements—not field data, real-user monitoring, or PageSpeed Insights results.
Single local lab run against the indexable case-study route in Chrome 151; scores can vary between runs. The fictional demo also scored 100 for performance, accessibility, and best practices. Its SEO score was 69 because Lighthouse correctly detected the intentionalnoindex directive.
| Measure | Budget | Current local result | Status |
|---|---|---|---|
| Largest page JavaScript, gzip | < 20 KB | 1.33 KB | Automated pass |
| CSS, gzip | < 35 KB | 6.32 KB | Automated pass |
| Largest mobile hero candidate | < 120 KB | 31.87 KB | Automated pass |
| Largest desktop hero candidate | < 180 KB | 100.63 KB | Automated pass |
| Maximum local viewport transfer | < 300 KB | 100.29 KB | Browser probe pass |
| Self-hosted WOFF2 files | 1 | 1 | Automated pass |
| Third-party runtime resources | 0 | 0 | Browser probe pass |
Headless Chrome loaded 10 routes at five target widths plus one 200% reflow simulation, producing 60 route-and-viewport results with no recorded failure. The probe checked HTTP status, horizontal overflow, one h1/main, first-focus skip link, minimum control size, accessible names, reduced-motion baseline, third-party requests, transfer budget, mobile-menu keyboard operation, and estimator error recovery.
Outcomes and tradeoffs
Tradeoffs