Project 02

TULUS.studio

This website, as its own case study: a studio site that shows its structure live, measured in the open — including what has not been measured yet.

For
TULUS — our own studio
Whose
Our own site
Year
2026
Work
Design, Development, SEO, Performance
A part of the home page of tulus.studio: the word TULUS set large across the middle of the page, its left half in ink on warm paper and its right half in blue on a cool ground, with pairs of terms under it such as Hierarchy and Semantic structure.

The problem

Every studio says it understands websites. A claim costs nothing. The site had to show it — to someone who cannot read code, and to someone who will open the inspector.

What exists now

One set of pages with two views. Surface is the design. Structure is the same page under a lens: its headings, landmarks, links, metadata and loading speed, read live from the page you are on.

Context

TULUS is a web development and SEO studio in Bandung. Its own site is the first thing a possible client sees, and the only piece of work it can show without asking anyone’s permission.

Problem

A studio site usually proves taste. It rarely proves engineering, and it almost never proves SEO, because the parts that matter to a search engine are the parts a visitor cannot see. Saying “semantic, fast, accessible” on a slow page built from anonymous boxes is the normal state of the trade.

Constraints

  • Nothing on the site may be invented: no client counts, no years, no ratings, no promised rankings.
  • The proof has to work without a mouse, without motion, and without scripts for the content itself.
  • The interaction may not make the page slow. Whatever it costs is loaded only when it is used.
  • The site must not resemble Laras, the studio we work with. Different paper, different voice.

Approach

Show both realities of a page. Surface is what people see. Structure is what a browser and a search engine read. Structure is not a second picture drawn for effect: it is the same document, read at that moment — element boxes measured from the live page, names taken from the real tags and attributes, speed taken from the visitor’s own browser. Where a number cannot be read, the page says Not measured.

Design

Warm paper and ink for the surface; one cool light for structure, which appears only where structure is being shown. Two type systems: a grotesk for names and anything a machine reads, a serif for sentences said to people. One recurring mark, a ring — a full stop you can see through — which is also the lens at rest.

The title on the home page is sized from the grid rather than from the window: the word NOTHING is exactly as wide as eight of the twelve columns, at every width. The structure view shows it.

Development

Static pages, generated ahead of time. The style sheet is written by hand and travels inside each page, so nothing blocks the first paint. There is no framework running in the browser.

The structure view is one sheet of light blended so that each colour channel keeps whichever value is lighter: ink becomes light, paper becomes glass, and the text stays text — selectable and readable. It costs the browser compositing only; the page is not copied and not repainted. The notation over it is drawn from getBoundingClientRect on the real elements.

None of it is in the way of the page. The code for the structure view is fetched after the page has loaded, while the browser is idle, and nothing is measured or drawn until the switch is reached for. The notation is then drawn one section at a time, for the part of the page you are looking at and the parts about to come into view. A section you never reach is never drawn. The inspector is fetched when it is opened. A visitor who has asked their browser to save data gets none of it until they press the switch.

SEO

  • One h1 per page, headings in order, landmarks named.
  • Every page has its own title, description and canonical address; addresses have one spelling.
  • A sitemap that lists exactly the pages meant to be found, and a robots.txt that points to it.
  • Structured data for what the pages actually are: Organization, WebSite, WebPage, BreadcrumbList, Service, Article. No review or rating markup, because there are none. No local-business markup until there is an address and opening hours to put in it.
  • The content is in the HTML. A crawler that runs no scripts reads every word a visitor does.

Performance

The numbers are in the table below and on the page itself: switch any page to Structure and it reports what your own browser measured on this visit.

One of them has its own article. When a web font arrives late, the text is set twice and the page can move. We measured that movement on four pages with and without a fix, and wrote down what the fix is and what it cost.

Results

Two things a client cares about most — being found, and receiving enquiries — cannot be reported for a site that has just been built. They are listed as not measured, and will be filled in with dates when there is something true to say.

Results, with the date and the instrument of each measurement
What Result When and how
First load of the home page, desk 16 requests · 159 kB . Headless Chromium with an empty cache at 1440 × 900, bytes on the wire, from Bandung to https://tulus.studio on the day it went live. It includes the code of the structure view, which is fetched once the page has loaded. None of the requests goes to a third party.
First load of the home page, phone 15 requests · 155 kB . The same instrument at 390 × 844.
Lighthouse, phone profile, seven pages Performance 93–100 · accessibility, best practices, SEO 100 . Lighthouse 13.5 with its simulated phone (a CPU four times slower, slow 4G), five runs per page, the middle one reported, on our build machine with nothing else running, against the site as it was about to go live. The 93 is the about page: in three runs of five the simulation counted the first layout of the page as coming after the first paint. Largest contentful paint 1.4 to 2.1 seconds, layout shift 0 on every page. A lab score: it says the page can be fast, not that every visit is.
Lighthouse, desk profile, seven pages 100 · 100 · 100 · 100 . The same run with Lighthouse's desk profile: performance, accessibility, best practices and SEO. Largest contentful paint 0.4 to 0.5 seconds.
Automated accessibility check 0 violations . axe-core 4.13 (WCAG 2.0 to 2.2, A and AA, and its best practices) in headless Chromium: all 19 pages at 1440 and 390 px, in the surface and in the structure view, and with the inspector open; 79 audits, run by us. An automated check finds only part of what a person would; a screen reader has not been used yet.
Keyboard walk 0 problems in 873 steps . Our own check presses Tab through every page at 1440 and 390 px: the skip link comes first and works, and at every stop the focus can be seen and is not hidden under the header or the switch.
Layout shift when the fonts arrive late 0.0000 to 0.0001 . Four pages at 1440 × 900 and 390 × 844 in Chromium 153, every font held back 350 ms, the middle of three loads each. A lab figure from one machine. Without the fix the same pages moved 0.003 to 0.045.
Search visibility Not measured. The site is new. There is no search data yet; when there is, it goes here with its date.
Enquiries Not measured. Counting starts when the site is live on its own address.

Lessons

  • Take things away. The lens first followed the cursor with a soft delay and carried four tick marks. Both read as decoration. It now follows the pointer exactly and is a plain ring.
  • One name, one meaning. In the first prototype the lens opened over every part of the page. The cause was one attribute name used for two different things. The fix was a rename; the lesson is older than the web.
  • Draw only what is looked at. The first version drew the notation for the whole page as soon as the browser was idle. It was one long task, and it doubled the number of elements in the page for visitors who never asked to see it. The second drew only what was on screen, but still ahead of time, and on a slowed-down phone that preparation alone held one service page up for a third of a second in three runs of five. Now only the code is fetched ahead of time. The notation is prepared when the switch is reached for, and drawn a section at a time once it is pressed.
  • A note must not cover what it describes. On a phone held sideways, the structure view wrote the address of a link across the next line of the paragraph. We had looked at dozens of pictures of that view and not seen it. A check that compares every note with every line of text then found the same fault on seven of the first eight pages it was shown. A note now takes the first free place beside what it names, and is left out where there is none.
  • An instrument has to be able to fail. One run of our own measurement printed a perfect zero for the version of a page we knew was worse. The machine had been busy and there had been nothing to measure. The script now says so instead of printing a number.
  • Measure in the open. A table that says “Not measured” looks weaker than one full of numbers. We think it is the stronger of the two, because every other line in it can then be believed.

The page’s own record

Read from tulus.studio on . A site changes; this is what it said that day.

Title
TULUS — Web development and SEO studio in Bandung
Description
TULUS is a web development and SEO studio in Bandung, Indonesia. Websites people understand and search engines can read, with the structure shown underneath.
Canonical
https://tulus.studio/
Robots
index, follow, max-image-preview:large
Language
en
Structured data
Organization, WebSite, WebPage
Landmarks
header · nav × 2 · main · section × 17 · aside · footer
Links
36 internal, 3 external
Images
2: 2 described, 0 decorative, 0 without alt
Document
799 elements, nested 12 deep
First load
16 requests, 159 kB, 0 to third parties

Heading outline

  1. H1 Nothing hidden. Web development and SEO, built with honest intent.
  2. H2 Beautiful isn’t enough.
  3. H2 Built for people. Understood by search.
  4. H2 Work
  5. H3 LARAS
  6. H3 TULUS.studio
  7. H2 A case study is a record of decisions.
  8. H3 Before
  9. H3 Thinking
  10. H3 After
  11. H2 You shouldn’t need to trust us when we say we understand SEO. You’re looking at it.
  12. H2 Search is earned.
  13. H3 Technical foundation
  14. H3 Relevance
  15. H3 Authority
  16. H3 Iteration
  17. H3 What we will not promise
  18. H2 Services
  19. H3 Web development
  20. H3 SEO
  21. H3 Website care
  22. H2 What we put first
  23. H2 What are you trying to achieve?
  24. H3 A few useful details.
  25. H3 Where can we reply?
  26. H3 Your starting point
  27. H2 Let’s build something that deserves to be found.