My portfolio opens with an interactive Three.js scene: water, a sky, a floating cube and camera movement between views. It gives visitors a direct example of the visual development I do.
The site also needs to explain my services, show project details and let someone contact me. Those parts have their own URLs and HTML content. WordPress supplies the pages; Three.js supplies the visual experience around them.
That structure lets someone arrive directly on a service page from search, while a visitor exploring the homepage can move through the 3D scene.
WordPress pages and a shared 3D experience
The theme uses Sage and Blade templates to render content on the server. Three.js handles the scenes, and Highway handles navigation and animated transitions between pages.
The homepage and project archive include substantial 3D experiences. Service details and project descriptions are written as HTML documents, even where their presentation includes animation or text drawn through WebGL.
This distinction matters because the browser can display information that a search engine cannot extract in the same way. Google's developer guidance says content rendered inside a canvas is not indexed as text and recommends semantic HTML for meaningful content. Google's guidance for developers
On the homepage, the main heading has an HTML equivalent. The page also includes an introduction and links to projects and contact in its version without JavaScript. The information describes the same offer visitors encounter in the interactive experience.
Each service has a direct route
The website and frontend development services have individual pages. Their HTML includes a heading, the audience, scope, process, pricing explanation, questions and a contact link.
Someone opening a service URL directly gets that page's content. They do not need to visit the homepage or discover a particular object in the scene first.
The service detail pages open without the scene loader covering their text. The visual systems can initialise in the background. This also makes the opening experience better suited to someone arriving with a specific question about the work.
For search discovery, these are ordinary links with destinations. Google's JavaScript SEO documentation recommends links using an anchor element with an href, so a crawler can identify the linked URL. JavaScript SEO basics
Animated navigation still has to update the document
When navigation replaces a page without a full browser reload, it is easy to concentrate on the transition and leave the previous page's metadata behind.
The router updates the title. I also synchronise the destination's description, canonical link, language alternatives, social metadata and structured data. The language switcher is updated to point to the corresponding translation of the new page.
That keeps the document aligned with the content someone is viewing. A service page should describe that service after an animated transition just as it does when opened directly.
Rendering quality follows the available frame time
The water, lighting and screen effects all compete for rendering time. A fixed quality setting would ask very different devices to do the same amount of work.
The site has a render budget that adjusts resolution and effect quality using frame timing. Where GPU timing is available, it helps distinguish graphics work from other causes of a slow frame. Where it is unavailable, the system uses missed refreshes to guide adjustments.
This is more useful than treating a reported frame rate as a device score. A fast and a slow device can both report 60 frames per second on a 60 Hz screen while having very different capacity for additional effects.
Loading also involves more than downloading assets. Shader compilation and JavaScript work can delay the first useful view or interrupt a transition. The site prepares some work for other views after the opening, during idle periods or when a visitor hovers over or focuses a relevant link.
I explored a WebGPU renderer too. WebGL is currently the default, with WebGPU available as an optional path. In this implementation, the extra startup work involved in building shader graphs made the opening and some transitions slower on constrained CPUs. Choosing the default required looking at startup behaviour as well as GPU rendering time.
A version without JavaScript needs deliberate styling
Server-rendered HTML can still be inaccessible if a loader covers it indefinitely or styles leave it hidden until a script runs.
The theme includes styles for visits without JavaScript. They remove the loader, restore scrolling and reveal text that animation would otherwise introduce. The homepage provides its introduction and key actions in HTML when the scene cannot run because scripts are disabled.
This provides a useful fallback, but it is only one part of accessibility. Keyboard interaction, focus during navigation, motion preferences and readable controls also need attention. A fallback alone does not establish that an interactive site meets every accessibility requirement.
What Search Console has confirmed so far
On October 7, 2026, I inspected the Estonian website and frontend development service URLs in Google Search Console. Both were reported as indexed. For the website service page, Google reported a successful crawl on October 3 and selected the declared canonical URL.
That confirms Google has indexed those two pages. It does not establish that the recent changes improved their rankings or brought more enquiries. Those outcomes require a longer period of relevant search and enquiry data.
The approach I would reuse is a 3D experience supported by readable documents, direct links and a rendering budget that accounts for the device. It gives the visual work room to be expressive while keeping the information available through ordinary web pages.
You can explore the portfolio, read about my frontend development services, or discuss an interactive web project.