Fluid by default
Type and spacing scale smoothly with the screen. No awkward jumps between phone and laptop.
Website & web-app studio
TekTross designs and builds websites and web apps that load in a blink and feel effortless to use.
01 Services
Websites, web apps, design systems, audits and AI features, each with animated samples.
Marketing sites, landing pages and company sites that load fast on any phone. Every page is hand-written, accessible and easy for your team to update.
More about websitesStarts from ₹5,000 in India · US$50 outside India For details, email admin@tektross.com
Dashboards, portals and internal tools that feel as quick as a native app. We design the screens and build the front end your users touch every day.
More about web applicationsA shared set of tokens and components so every screen stays consistent. Your team builds faster because the small decisions are already made.
More about design systemsWe measure your site on real phones and slow networks, then fix what matters most. You get a ranked list of changes with numbers before and after.
More about auditsSearch, summaries and assistants added to your product where they save people time. We keep them fast, private and clearly labelled.
More about AI featuresEvery sample is a fictional concept, built in plain HTML and CSS like the rest of this page.
Each sample is a small page of its own in plain HTML and CSS, not a screenshot or a video, shown scaled down in a frame that loads only as it nears the screen. The carousels are native horizontal scroll with scroll-snap. With JavaScript, a deck on screen moves to its next sample every few seconds: pointing at it or focusing it holds it, using it or pressing Pause stops it, and it never starts by itself if you prefer reduced motion. Without JavaScript, the samples stack as a list.
<section aria-roledescription="carousel" aria-label="Websites samples">
<ul class="deck-track" role="list">
<li role="group" aria-roledescription="slide" aria-label="1 of 3: Harbour Bakery">
<iframe src="/samples/websites-bakery/" loading="lazy" tabindex="-1" aria-hidden="true" title="…"></iframe>
</li>
</ul>
<button type="button">Pause</button>
</section>
.deck-track { overflow-x: auto; scroll-snap-type: x mandatory; }
.deck-slide { scroll-snap-align: start; }
02 Foundations
Type, colour and spacing come from one set of tokens, so nothing drifts.
step-5Aa Faststep-4Aa Fast pagesstep-3Aa Fast pagesstep-2Aa Fast pages sellstep-1Aa Fast pages sell morestep-0Body text sits at 16–18 px with a 65ch measure.step--1Captions, labels and small print.Contrast against the page background, light / dark. AA needs 4.5 for text and 3 for UI.
Consistency is what makes a site feel expensive without costing more.
Every size, colour and gap on this site is a CSS custom property. Type and space scale smoothly with clamp() between a 360 px phone and a 1440 px desktop.
:root {
--step-0: clamp(1rem, .9583rem + .1852vw, 1.125rem);
--space-m: clamp(1.5rem, 1.4375rem + .2778vw, 1.6875rem);
--accent: #233D5A;
}
h2 { font-size: var(--step-4); }
04 Content & cards
Cards and grids that reflow gracefully from a phone to a wide monitor.
Fast, readable, easy to update.
Dashboards and portals.
Tokens your team reuses.
Numbers before and after.
Useful, labelled, private.
Fixes and monthly checks.
Type and spacing scale smoothly with the screen. No awkward jumps between phone and laptop.
Keyboard, screen reader and zoom are checked on every component, not bolted on at the end.
“We asked for a faster site. We got one our team actually enjoys updating.”
The frame keeps its shape before anything loads, so the page never jumps.
One layout, every screen, no broken edges to apologise for.
CSS grid with named areas and container queries. Media keeps its shape with aspect-ratio, so nothing jumps while it loads.
<ul class="bento">
<li class="bento-cell b1">…</li>
</ul>
.bento { display: grid; grid-template-areas: "a a b" "c d b" "e e f"; }
.media-frame { aspect-ratio: 16 / 9; }
05 Forms & inputs
Clear labels, instant feedback and short steps turn visitors into enquiries.
Type a partial address, then leave the field.
Looks good
Add the domain ending, like .com
3 short steps
All done. This demo does not send anything.
Every abandoned form is a lead you paid for and lost.
Native inputs, native validation and :user-invalid styling. Floating labels are pure CSS; the toggle is a checkbox with role="switch".
<div class="field">
<input id="email" type="email" placeholder=" " required>
<label for="email">Work email</label>
</div>
.input:not(:placeholder-shown) + label { translate: 0 -.9em; scale: .8; }
.input:user-invalid { border-color: var(--error); }
06 Data & feedback
Charts, counters and status built by hand, with no heavy libraries.
Higher is better: up across the last 9 releases.
72%complete
A short, polite message that never steals focus.
Dashboards and web apps, not just brochures.
Charts are hand-written inline SVG. Bars grow with transform and lines draw with stroke-dashoffset, bound to your scroll position.
<svg viewBox="0 0 240 120" role="img" aria-label="Bar chart">
<rect class="bar" x="8" y="72" width="28" height="38"/>
</svg>
.bar { transform-box: fill-box; transform-origin: bottom;
animation: grow linear both; animation-timeline: --chart; }
07 Commerce & pricing
Plans, products and comparisons laid out so the right choice is obvious.
Sample figures for a fictional app, not TekTross prices. See our website prices
$12$10/ month
Billed monthlyBilled $120 yearly
$29$24/ month
Billed monthlyBilled $288 yearly
$79$66/ month
Billed monthlyBilled $792 yearly
Warm light, solid oak base.
$64 Sample
| Feature | Starter | Team | Scale |
|---|---|---|---|
| Projects | 1 | 10 | Unlimited |
| Shared components | —Not included | Included | Included |
| Single sign-on | —Not included | —Not included | Included |
| Support | Priority | Named contact |
Fewer questions before checkout means more checkouts.
The monthly and annual switch is two radio buttons and the :has() selector. The comparison table uses real table headers with scope.
<input type="radio" name="billing" id="bill-y">
<label for="bill-y">Annual</label>
.pricing:has(#bill-y:checked) .pm { display: none; }
.pricing:has(#bill-y:checked) .py { display: inline; }
08 Motion & micro-interactions
Hover, press and open states that respond instantly and never get in the way.
No. Every page is written by hand from a shared set of tokens and components, so nothing is there that you do not need.
Yes. Copy lives in plain data files, so changing a headline does not mean touching code.
Support: fixes, updates and a monthly performance check on real phones.
Feedback this quick costs nothing in speed and earns trust.
Only transform and opacity animate. The list reorder measures positions first, then plays a short transform (the FLIP technique).
const first = item.getBoundingClientRect();
list.insertBefore(item, item.previousElementSibling);
const last = item.getBoundingClientRect();
item.animate([{ transform: `translateY(${first.top - last.top}px)` },
{ transform: 'none' }], { duration: 240, easing: 'ease-out' });
09 Performance proof
Your browser loaded everything you have seen so far in the bytes below.
KB ms
Measured when this site was built: compressed size of this page, its stylesheet, script and font. Turn on JavaScript to see your own browser's numbers.
Figures are read live from your browser, never typed in by us.
The figure adds up transferSize from the Navigation and Resource Timing APIs. With JavaScript off you see the size measured when the site was built.
const entries = [
...performance.getEntriesByType('navigation'),
...performance.getEntriesByType('resource')];
const bytes = entries.reduce((sum, e) => sum + e.transferSize, 0);
10 Process
Discover, design, build, launch and support, with you involved at every step.
We learn your goals, users and constraints.
Tokens, layouts and copy, reviewed with you.
Hand-written, tested, accessible code.
Measured on real phones before going live.
Fixes, updates and monthly performance checks.
You see progress weekly and nothing ships without your sign-off.
One ordered list. A container query switches it from a vertical timeline to a horizontal stepper once it has room.
<ol class="steps">…</ol>
.process { container-type: inline-size; }
@container (min-width: 720px) {
.steps { grid-auto-flow: column; }
}
11 Selected work
A few recent projects, what the problem was and what changed after launch.
Business
Professional services
Retail SMB
Details and stack are inside each case study.
Each card is an article with a real link. Case studies are generated from one data file at build time.
<article class="case">
<h3>Appointment management platform</h3>
<dl>…problem · built · outcome…</dl>
<a href="/work/#appointment-management">View the appointment management case study</a>
</article>
12 Contact
Tell us about your project and we will reply within two working days.
Prefer email? admin@tektross.com works too.
A plain HTML form posting to a static form service. With JavaScript on it sends in the background; with it off, you land on a thank-you page.
<form action="https://formspree.io/f/…" method="POST">
<input name="email" type="email" required>
<input name="_gotcha" tabindex="-1" autocomplete="off">
<button type="submit">Send message</button>
</form>