Bygga
제품명을 박스에 입력하면 Bygga가 3D로 모든 조립 단계와 부품·스크류·도구를 보여주고 음성으로 안내합니다
WashUp가 주변 세차장을 찾아 서비스·가격·평가를 보여주고, 원하는 시간에 예약하고 세차 진행 상황을 확인합니다
WashUp بيوصلك بأقرب مغاسل العربيات حواليك. شوف الخدمات والأسعار والتقييمات، احجز الميعاد اللي يناسبك، وتابع عربيتك لحد ما تخلص.
라이프스타일TypeScript · CSSGitHub @ebrahim-mamdoh온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
README 전문 보기 ↗The public face of WashUp, the car-wash booking platform: the story for car owners, the
partner pitch for car-wash owners, and the trust story behind the admin console.
Arabic (RTL) at /, English at /en.
npm install
npm run dev # http://localhost:3400
npm run typecheck
npm run lint
npm run build && npm start
No environment variables are needed. Links that are still placeholders (store listings,
contact inboxes, production domain) live in src/lib/site.ts — change them there only.
Same toolchain as the Qhub site it is modelled on: Next.js 16 (App Router, Turbopack),
React 19, TypeScript, Tailwind CSS 4, next-intl 4 (Arabic default, localePrefix: "as-needed"),
lucide-react. No animation library: motion is CSS keyframes/transitions plus one shared
scroll loop.
Fonts: Thmanyah Sans (self-hosted, 400/700/900) for Arabic and body text; Unbounded 800
(via next/font, served from our origin) for the wordmark and English headings.
src/
app/[locale]/ layout (html dir/lang, fonts, Navbar, Footer, <Effects/>), home, /partners
i18n/ next-intl routing / request / navigation
messages/{ar,en}.json every visible string
modules/home/ HomeView + sections (Hero, Problem, Steps, Features, Journey*, Services,
PartnersBand, Trust, Numbers, Download, HomeFaq), copy.ts
modules/partners/ PartnersView + PortalTour + TourMocks
shared/brand/ Logo (W ribbon mark + wordmark, SVG)
shared/mock/ Phone frame, app screens, tracking screen, partner dashboard, car, bubbles
shared/ui/ Reveal, WordsReveal, ScrollTintText, Parallax, SpotlightCard, ScrollTilt,
Counter, LazyMount, Button, Section, StoreBadges, Effects
shared/sections/ StepsPath, Faq, FinalCta
lib/ scroll loop + helpers, typography (kashida), site links
data-* attributes. A single client island, shared/ui/Effects.tsx, drives all of them:
one IntersectionObserver flips data-shown (CSS runs the transition), one scroll loop moves
[data-parallax] elements that are near the viewport, one delegated pointer listener feeds
the card glow. Nothing per element hydrates. Without JS everything is simply visible
(the hidden state only applies under html.js).useScrollFrame from
lib/scroll.ts: one shared requestAnimationFrame, gated by an IntersectionObserver so
far-away scenes cost nothing, writing styles straight to the DOM (no React state per frame).content-visibility: auto (.cv-auto).LazyMount); the desktop tracking
scene is code-split and loaded only on wide screens (JourneyDesktop).filter: blur(), and there is no backdrop-filter on
animated layers: both are very expensive to rasterise on phones.prefers-reduced-motion stops every animation and shows final states.messages/ar.json and messages/en.json.ms/me/ps/pe/start/end) so RTL and LTR both work; horizontal motion
uses --dir-x or mirrors the scene (the wash bay is drawn LTR and flipped in Arabic)..num / dir="ltr".<span className="hidden lg:block">),
never on the button itself — its own inline-flex would beat hidden.shared/brand/Logo.tsx with the designer's master SVG.lib/site.ts).