🖨️

Business-Card Site for a 3D Printing Engineer

for an additive-manufacturing engineer in Cheboksary: one page instead of a long chat

Client: Valery Afanasiev

In production
1 page
profile, process, services, FAQ and contacts with no extra clicks
560 points
per part in the lightened canvas 3D scanner, at most 30 frames per second
107 KB
own fonts instead of Google Fonts, the two main ones preloaded
One-page website of 3D printing engineer Valery Afanasiev: first screen with a canvas 3D scanner
One-page website of 3D printing engineer Valery Afanasiev: first screen with a canvas 3D scanner

The task

A 3D printing and reverse engineering engineer in Cheboksary gets orders from messengers and referrals. He needed a page to send a customer to instead of a long chat: who the specialist is, what he does, how the process works and how to get in touch. It is a business card for an individual specialist, not for a company.

The solution

A business-card site is a short page about a specialist: who he is, what he does and how to reach him. Here it is styled like engineering software, to suit the profession.

  • The first screen is a 3D scanner viewport on canvas: three parts in rotation (a gear, a flange and a bracket), a scanner beam turns the point cloud into a wireframe, and the model rotates with a mouse or a finger.
  • A «Process» section: scan, geometry, print, drawings. A mobile menu and a highlight for the current section in the header.
  • A «Frequently asked questions» section on <details> elements, with no JavaScript.
  • A contact for the phone: a QR code pointing to the page and a vCard file; on a phone, a single «Add to contacts» button replaces the QR code.
  • Own fonts, a link preview image and icons for search results.

How it works

A 3D scanner on canvas with no libraries

Canvas is an area of the page where a script draws graphics. The scanner uses its own 3D projection on canvas 2D with no external libraries. Drawing runs only while the viewport is visible and the tab is active. Points are drawn in three brightness batches, the beam gradients are created once per size, and the pixel density is capped at 1.5. By the developer's measurements, script time on the first screen is about half of the first version's.

A phone contact: QR and vCard

A vCard is a business-card file that a phone opens as a new contact. Nginx serves .vcf as text/vcard, because the standard type list does not include it. On phones the download attribute on the link is removed by a script: with it an iPhone puts the file into Files, without it the phone opens «Create contact» straight away. The vCard gives the city as Cheboksary.

Caching and indexing

The site runs in its own valera-web container with its own nginx config. The page, robots.txt and sitemap.xml are no-cache; CSS, JS and fonts with ?v= are cached for a year and images for a week. A new version of the page is submitted to IndexNow, a protocol a site uses to tell search engines about changes.

Animations that stay light on a phone

All animations except the scanner use only transform and opacity: the name «decoding», the ticker, the skills strip, the drawing of icons and scroll progress. The prefers-reduced-motion setting turns them off, and without JS the page stays static and readable.

Results

  • The specialist's customer needs only one link: services, process and contacts are on a single page.
  • The contact is saved to a phone with one tap or by scanning the QR code.
  • The page is open to search engines and marked up: Person with services, WebSite, ProfilePage and FAQPage.
  • The fonts are our own, so there are no requests to Google Fonts.
  • The sources contain no PageSpeed measurements, so we give no scores.

Technologies and why

  • HTML, CSS and JavaScript with no frameworks — the page is light and needs no build step.
  • Canvas 2D — the scanner and the point cloud without external libraries.
  • nginx — serving static files with its own cache rules and the text/vcard type.
  • Docker — a separate site container on the studio's server.
  • JSON-LD — Person, WebSite, ProfilePage and FAQPage markup for search engines and AI assistants.

Status

In production, the site is public: valera.devunit-lab.ru. The latest edit, of 29 September 2026, corrected the city to Cheboksary in the title, the markup and the vCard.

Questions about this project

Why does an individual specialist need a business-card site if messengers exist?
The page replaces a long chat: one place shows who the specialist is, what he does and how the process runs from scan to drawings. The link is easy to send to a customer, and the site can be found through queries about 3D printing, reverse engineering and 3D scanning.
How can a specialist's contact be saved to a phone from the site?
The site has a vCard contact and a QR code pointing to the page. On a phone, a «Add to contacts» button replaces the QR code: on an iPhone it opens the «Create contact» window at once instead of dropping a file into the Files app.
How is the business-card site set up for SEO?
The page has its own title and description aimed at queries about 3D printing, reverse engineering and 3D scanning, and the h1 carries the name and profession. It has JSON-LD markup for Person with services, WebSite, ProfilePage and FAQPage, robots.txt, sitemap.xml and icons for search results. After edits the address is submitted to IndexNow.
Does the animated 3D scanner slow the site down on a phone?
The scanner is drawn on canvas 2D with no libraries and draws only while it is on screen and the tab is active. The point cloud is lightened to 560 points per part at no more than 30 frames per second. With the browser's data-saver mode on, a single static frame is shown.
Does the site work without JavaScript?
Yes. Without the script the page stays static and readable. Animations are turned off by the prefers-reduced-motion setting, and apart from the scanner they use only the transform and opacity properties.
Where is the site hosted?
In its own nginx container on the studio's web server, behind an entry nginx. The page, robots.txt and sitemap.xml are always revalidated with the server, while styles, scripts and fonts with a version in the URL are cached for a year.

Need something similar?

Tell us about the task — we'll show how we solved it and estimate the scope.