sky-icy is the website for Mohamed Tafran's workshop in the Netherlands — a family-run business that performs air-conditioner maintenance, installation work, camera (CCTV) installation, and heater/stove services. The product intent is to give the shop a public, Arabic-first presence that explains what the shop does and who it serves, lets visitors browse the four trades and past work, and lets them book a service or get in touch — while giving the shop owner a protected place to receive those requests and manage how the services and past work are presented.
The audience is deliberately two-track. The first track is households — individual homeowners who need a technician to show up and fix, install, or mount something. The second track is companies — facility representatives who need a vendor they can schedule and request a quote from. The site must serve both from the same public surface without diluting either: household trust and corporate credibility are both first-class outcomes.
The site is Arabic-first and right-to-left. Its visual language is workwear trust — kraft paper, ink, denim and safety orange, stamped badges, ruled panels — not a generic software template.
sky-icy is delivered as a custom web application with a public, anonymous-facing side and a protected owner side.
Public side (no account required). Anonymous visitors — household customers and company representatives — can reach the home page, browse the four services and past work, submit a service booking, and send a message or request a quote. No registration is required for any of this.
Protected side (owner only). The shop owner (Mohamed) creates his own account through self-service registration, verifies himself on return via sign-in, and then uses two protected working destinations: an orders dashboard for incoming booking requests and messages from both households and companies, and a content-management destination for how the four services and past work are presented.
Actors. The accepted active human personas are exactly three: the shop owner (Mohamed), the household customer, and the company customer. No other human personas exist in this generation.
Current scope. Four services (air-conditioner maintenance, installation, cameras, heaters), a public booking path, a public contact/quote path, owner self-service identity, an orders dashboard, and content management.
Explicitly out of current scope. Nothing in the source authorizes online payment, invoicing, inventory, technician dispatch scheduling, customer accounts, or a customer-facing order history. These are not built.
The shop's own website owns everything the customer touches: the public pages, the booking form, the contact/quote form, and the owner's protected working surfaces. Identity is application-owned and self-service — the owner registers himself; there is no invitation, provisioning, or deployment bootstrap, and no customer account of any kind.
Access is split cleanly. The home page, services, booking, and contact destinations are anonymous and require no sign-in. The orders dashboard and content management are protected and require the owner to be signed in; the sign-in and registration surfaces are themselves anonymously reachable, because a protected destination cannot own the interaction that establishes access to itself.
The household/company split is a presentation and routing distinction, not a permission distinction. Both audiences use the same public destinations and the same booking and contact paths; the site simply speaks to each in its own register and routes corporate enquiries toward a quote request. There is no role-based visibility over shared product state.
Everything described in this document is current. No future-horizon features are specified by the source.
Not applicable — no reference directive in this request declares content_source.
The page inventory below is the final, ordered page contract. Each page appears exactly once.
sky-icy in Alfa Slab One, stacked on two lines, anchored right (RTL start), spanning columns 1–8, with a full-width hard orange rule beneath it; four stacked ruled rows on the opposite side, one per trade, each with a thick-line stencil icon, an Arabic label in Cairo 700 caps, and a tabular code.FR-1 — Understand what the shop is and who it serves (explicit) As a household customer or a company customer, I should land on الرئيسية and immediately understand that sky-icy is an air-conditioner maintenance, installation, camera, and heater workshop serving both households and companies, so that I can decide whether this shop is relevant to me.
FR-2 — Browse the four services and past work (explicit) As a household customer or a company customer, I should browse الخدمات and see the four services — صيانة مكيفات, تركيب, كاميرات, مدافئ — each as its own ruled panel with a badge number 01–04, alongside past work, so that I can judge the shop's range and quality before committing.
FR-3 — Reach the shop by phone (explicit) As a household customer or a company customer, I should find the shop's phone number presented as a stamped contact plate on تواصل معنا and in the ticker, so that I can call directly instead of filling a form.
FR-4 — Book a service (explicit) As a household customer or a company customer, I should submit a booking on حجز خدمة by choosing the service type, entering my contact details, and stating the appointment I want, so that the shop can schedule a visit.
FR-5 — Send a message to the shop (explicit) As a household customer or a company customer, I should send a message on تواصل معنا with my name, contact details, and message body, so that I can ask something the booking form does not cover.
FR-6 — Request a quote as a company (explicit) As a company customer, I should request a quote from the corporate track — via «اطلب عرض سعر» on الرئيسية or the company-quote indicator on تواصل معنا — so that my facility's needs are handled as a vendor enquiry rather than a single household visit.
FR-7 — Register the shop owner's account (required_inference) As the shop owner (Mohamed), I should create my own account on إنشاء حساب without an invitation or pre-provisioning, so that I can reach the protected working surfaces.
FR-8 — Verify on return (required_inference) As the shop owner (Mohamed), I should sign in on تسجيل الدخول when I come back, so that my requests and content stay bound to me and are not exposed to anyone else.
FR-9 — Review incoming requests (required_inference) As the shop owner (Mohamed), I should review booking requests and messages from both households and companies in لوحة الطلبات, so that I can act on every enquiry that arrives.
FR-10 — Mark where a request stands (required_inference) As the shop owner (Mohamed), I should mark the status of each request in لوحة الطلبات, so that I can tell which enquiries I have already handled.
FR-11 — Manage how the four services are presented (required_inference) As the shop owner (Mohamed), I should edit each service's presentation in إدارة المحتوى while preserving badge numbers 01–04 and codes AC-01 / IN-02 / CAM-03 / HT-04, so that what customers read on الخدمات and الرئيسية stays accurate.
FR-12 — Manage past work (required_inference) As the shop owner (Mohamed), I should add, edit, and remove past-work items in إدارة المحتوى, so that the gallery on الخدمات shows real completed work.
Product context. Mohamed owns and runs a workshop that performs air-conditioner maintenance, installation work, camera installation, and heater services. He is the only person with a protected working surface on the site, and the only person who creates an account.
Primary goal. Receive new booking and contact requests from both households and companies, and keep the public presentation of his four services and his past work accurate.
Distinct accepted responsibilities. Mohamed's work is the only work on the site that is recurring and stateful. He registers himself on إنشاء حساب, verifies himself on return on تسجيل الدخول, reviews incoming requests in لوحة الطلبات, marks where each request stands, edits the four service blocks in إدارة المحتوى while preserving badge numbers 01–04 and codes AC-01 / IN-02 / CAM-03 / HT-04, and manages past-work items. No other persona has any of this.
Relevant inputs or decisions. He decides what each service says publicly, which past work to show, and how far along each request is. He supplies his own identifier and secret at registration.
Interactions with other accepted participants. Mohamed never interacts with customers inside the product. His relationship with them is one-directional and asynchronous: household customers and company representatives submit bookings and messages, and those submissions appear in his dashboard. He responds outside the product, through the contact details they supplied.
Observable success. New booking and contact requests from both the household and the company track arrive in لوحة الطلبات, and the public pages reflect the services and past work he has published.
Product context. A homeowner who needs one of the four trades done at their own home — an air conditioner serviced, something installed, cameras mounted, or a heater attended to. They arrive without an account and without any prior relationship with the shop.
Primary goal. Get a trustworthy technician to show up, with as little friction as possible.
Distinct accepted responsibilities. The household customer browses الخدمات to judge range and quality, then either books a visit on حجز خدمة by choosing the service, giving contact details, and stating the wanted appointment, or calls the number on تواصل معنا. Their defining concern is trust in who shows up — which is why the past-work gallery and the plain-spoken tone matter to them specifically.
Relevant inputs or decisions. Which of the four trades they need, their contact details, and the appointment they want. They decide between booking a visit and simply calling.
Interactions with other accepted participants. They hand their request to Mohamed through the booking or message form and then wait for him to reach them on the contact details they gave. They never see his dashboard.
Observable success. A confirmation panel restating their service, contact details, and requested appointment — and the shop reaching them to arrange the visit.
Product context. A representative of a company or facility who needs a vendor for maintenance, installation, cameras, or heating across a site rather than a single home visit. They arrive anonymously, like the household customer, but they are evaluating the shop as a supplier.
Primary goal. Get a quote and arrange service for their company.
Distinct accepted responsibilities. The company representative browses the same الخدمات page but reads it as a capability statement, then takes the corporate track: «اطلب عرض سعر» on the denim panel of الرئيسية, or the company-quote indicator on تواصل معنا. Their defining concern is credibility and schedulability — whether this shop can be a vendor, not just a one-off technician.
Relevant inputs or decisions. The scope of services their facility needs, their contact details, and whether to request a quote or send a general message. They decide whether the shop's range is broad enough to be worth a vendor conversation.
Interactions with other accepted participants. Like the household customer, they hand their enquiry to Mohamed and wait for a response outside the product. Their enquiry arrives in لوحة الطلبات flagged as a company quote request, distinguishable from household bookings.
Observable success. Their quote request reaches the shop flagged as corporate, and Mohamed responds with a quote or an arrangement.
sky-icy wordmark, the four stacked trade rows with their codes (AC-01, IN-02, CAM-03, HT-04), and the two-track band that tells them this shop serves households as well as companies.Muse and headline. Aaron Draplin — badges and honest talk for a trades shop that never phones it in. The register is workwear trust: hand-built, plain-spoken, sturdy, slightly proud of its own grit. The name sky-icy carries the hot/cold duality of the trade, and the palette is built around it.
Colour tokens (light mode).
| Role | Hex | Use |
|---|---|---|
| Background (kraft) | #E8DFCE | Page ground |
| Surface (bone) | #F4EDE0 | Cards sitting on the kraft ground |
| Text (ink) | #141210 | All type |
| Primary (denim-navy) | #1E2A38 | Section bands, footer, badge rings, the "cold" half |
| Accent (safety-orange) | #E4571B | CTAs, stamps, underline rules, the "hot" half |
| Muted (kraft-grey) | #7A6E5C | Labels and metadata |
Proportion: ~65% kraft/bone, 25% ink, 8% denim, 2% orange. Orange is never used for body text and never as a large fill behind small type.
Typography.
0.02em, tight leading 0.95–1.05.0, expanded leading 1.15, so the slab weight reads as a stencil without breaking the joins.0.16em.1.75 line-height for Arabic legibility.Shape language. Hard-edged everything: 0–4px radii, 3px solid ink borders on cards and buttons, chunky ruled dividers, circular badge stamps with a double ring (ink outer, orange inner). Buttons are rectangular with a 2px offset hard shadow — no blur — so they read as stamped, not floated. No pills, no soft shadows, no glass.
Layout. A poster grid: 12-column base with visible 1px kraft rules between major bands; asymmetric section headers where the title sits flush-left in columns 1–7 and the meta block (service code, price band, availability) sits flush-right in columns 9–12. Services are four ruled panels in a 2×2 on desktop and a single stacked column on mobile, each with a badge number 01–04. The household/company split is a two-track band: denim panel on one side, kraft panel on the other, meeting at a hard vertical rule. RTL-first: everything mirrors so the wordmark anchors right and the meta block anchors left.
Imagery. No stock people, no 3D renders. Thick 3–4px line-art icons of the four trades — a condenser unit, a wall bracket, a dome camera, a stove — drawn as if cut from stencil. Halftone-duotone photography of real work (a technician's hands on a unit, a roof bracket, a camera mounted on a shop wall) treated in ink + orange duotone so no image competes with the palette. Occasional map and schematic linework as texture, plus kraft-paper grain over the whole page.
Readable-text rule. Headlines, wordmarks, labels, numbers, card text, and controls stay entirely inside the viewport and their container at 375px, 768px, and 1280px, wrapping or scaling (e.g. font-size: clamp(...) with its mobile size) to fit. No element covers any part of them. Imagery, decoration, and motion may be cropped, bled off an edge, rotated, overlapped, or cut as the direction asks — as long as they cover no readable text or control. The ticker may cross the viewport edge by design; every item becomes fully readable as it passes.
The printed workshop poster. The public entry is a full-bleed kraft-paper hero built as a printed workshop poster, not a SaaS banner.
On the right (RTL start), the wordmark sky-icy is set in Alfa Slab One at clamp(44px, 9vw, 104px), stacked on two lines, spanning columns 1–8, with a hard orange rule running the full width beneath it. On the left, four stacked ruled rows — one per trade — each carrying a thick-line stencil icon, an Arabic label in Cairo 700 caps, and a code in tabular numerals: AC-01, IN-02, CAM-03, HT-04. The whole block reads like a machine's nameplate.
Behind everything, a large circular badge stamp — double ring, ink outer and orange inner, «EST. SKY-ICY» curved around the top and «24/7 SERVICE» around the bottom — sits oversized at 420–560px and half-bled off the left edge. It does not rotate; it is simply stamped.
Two CTAs sit directly under the orange rule: a solid ink «احجز خدمة» button with its hard 2px orange offset shadow, and a ghost «عرض للشركات» button outlined in ink. A thin kraft band runs along the bottom edge with the ticker of service codes.
No gradient, no blob, no centred stack. The hero is asymmetric, ruled, and RTL-mirrored throughout.
Interaction Model: Static Motion Tempo: restrained Hero Dimensionality: flat
Landing Hero Motion Brief.
sky-icy wordmark over its full-width orange rule, the four trade rows with their codes, and the oversized half-bled badge stamp.prefers-reduced-motion, the reveals and the press animation are removed and the ticker becomes a static arrangement — its items wrap into rows or become a horizontally scrollable strip so each service code and phone number can be brought fully into view. The poster composition is unchanged.No parallax drift, no scroll-linked 3D, no bounces.
NFR-1 — RTL-first layout (explicit) Every page mirrors to right-to-left. The wordmark anchors right; the meta block anchors left. This is a hard requirement of the creative direction, not a locale option.
NFR-2 — Arabic-first typography (explicit) Arabic display uses Cairo 900 with letter-spacing 0 and leading 1.15; body copy uses Cairo 400/500 at 17–18px with 1.75 line-height. Latin display uses Alfa Slab One. Inter, Roboto, Poppins, DM Sans, and any neutral geometric sans are excluded as the display voice.
NFR-3 — Readable text and controls at every viewport (explicit) Headlines, wordmarks, labels, numbers, card text, and controls stay entirely inside the viewport and their container at 375px, 768px, and 1280px. Where the direction asks readable text to be cropped or run off an edge, the gesture is carried by imagery or decoration instead.
NFR-4 — Reduced-motion support (explicit)
With prefers-reduced-motion, the interface provides a usable static arrangement: the ticker's items wrap into rows or become horizontally scrollable so each item can be brought fully into view.
NFR-5 — Palette discipline (explicit) The palette stays kraft, ink, denim, and safety orange only. No blue–indigo primary or accent. No soft drop shadows, glass panels, gradient blobs, or 12px+ corner radii. The generic indigo/blue-on-white SaaS template is forbidden.
NFR-6 — Protected state stays protected (required_inference) لوحة الطلبات and إدارة المحتوى are reachable only by a signed-in owner. Requests and content remain bound to the owner who submitted or created them.
NFR-7 — Anonymous public access (explicit) الرئيسية, الخدمات, حجز خدمة, and تواصل معنا require no account. تسجيل الدخول and إنشاء حساب are anonymously reachable by design, because a protected destination cannot own the interaction that establishes access to itself.
NFR-8 — Durable request state (required_inference) Submitted bookings and messages persist and remain visible to the owner across sessions, so that no enquiry is lost between visits.
No separate worker, queue, or additional ingress route is required by any accepted workflow. Kubernetes is not required.
Assumptions.
Constraints.
Out of current scope. Online payment, invoicing, inventory, technician dispatch scheduling, customer accounts, and customer-facing order history are not authorized by the source and are not built.
No completed page designs yet.
Completed design pages will appear here when they are ready to preview.
No completed page designs yet.
Completed design pages will appear here when they are ready to preview.
No comments yet. Be the first!