Draft preview: visitors do not see these changes until they are published in the admin. Back to the editor
HEROData: logo theme.logo.default_url, name display_name (translated), cover site.cover_image, tagline site.content[lang].tagline (max 140), tags site.content[lang].tags (max 4 × 24 chars). The first tag can be highlighted (accent color).
  • Without a cover: a gradient from the brand colors.
  • "Join" follows joinPolicy: open → "Join"; approval → "Request to join"; invite → hidden.
  • Mobile: text over the image bottom; buttons stack full width.
  • Link previews (WhatsApp, Facebook, search engines): the shared link shows studio name · tagline and the cover image (else the logo). Design the cover so it still works cropped to 1200×630.

ABOUTData: site.content[lang].about, plain text with line breaks (max 1,200 chars), and site.about_image.
  • Stats (members, classes a week, coaches) were removed: phase 2 / pending decision whether to show real numbers.
  • Without an image: the text takes the full width.

WHY HYGEARFixed block, the same in every studio, written and translated by HyGear (interface strings, not studio content). The studio can only switch it off. Icons: one per card, colored brand / secondary / accent.

◎

↗

⌁

SCHEDULELive data from the studio's real schedule (studio_classes): GET /public-studio-sites/:slug → classes[] with starts_at, ends_at, duration, workout_name (in the page language), room_name, studio_name, difficulty_level (1–3).
  • No coach and no capacity / spots: the API hides them on purpose, and there is no booking. Members check in at the studio by scanning the room's QR, so the button is "Log in to check in".
  • 7 day tabs in the studio's timezone (timezone); a dot marks days with classes. Cancelled classes are not returned.
  • Empty state: no classes in the 7 days (toggle it in the controls).
  • Room / studio name: show the studio name only when the account has more than one studio.
  • Times always LTR, also in Hebrew.

▣
GALLERYData: site.gallery[], up to 6 images uploaded in the admin (JPG/PNG/WebP, max 5 MB each, stored on Cloudinary). No text, the same in both languages.
  • 1 image: full width; 2–4: a simple grid; 5–6: this mosaic.
  • No images: the section is hidden automatically even if it is switched on.
  • Tap opens a lightbox (design needed).

VISITData: site.content[lang].place_name, site.content[lang].address (per language); once for all languages: site.hours[] ({days: [0–6], open, close}), site.contact (phone, whatsapp, email, website, instagram, facebook).
  • Map: Google Maps embed of the address (no API key needed for the basic embed).
  • Today's row is highlighted (secondary green). Day names come from the browser (Intl), so they are always in the page language.
  • Each contact line appears only when filled. WhatsApp opens wa.me.
  • Pending decision: hours typed by hand (current) or derived from the schedule.

JOINEverything runs in the web app; there are no store links. "Join" → /join/<slug> (the existing signup, already branded per studio); "Log in" → /login. The PWA hint shows only where the browser can install the site (Chrome/Android: install prompt; iOS Safari: "Share → Add to Home Screen" instructions screen that already exists).

⊕
FOOTER"Powered by HyGear" can be switched off by the studio (site.show_powered_by). Coaches section: phase 2 / pending decision (does a coach need to agree to appear on a public page).
©
ADMINThe real admin is Ant Design, Hebrew RTL by default with an English switch; shown here in English for the designer. Who edits: the studio's own admins (permission org.settings.edit, their own studio only) and HyGear super admins (any studio). Shown only for accounts of type studio that have an address (slug). Save = PUT /accounts/:id/studio-site; every edit on the left updates the landing page view live in this mockup.
Studio › KS Studio › Studio site

Studio site

DRAFT / LIVEEvery change is a draft until it is published. Visitors only ever see the live version. The studio's admins and HyGear super admins can publish.
  • Save draft: stores the form as the draft (visitors see nothing new).
  • Preview: opens a signed link valid for 1 hour at the studio's own address (ks.hygear.studio/?site_preview=…) showing the draft, with a bar on top.
  • Publish: saves what is on the screen first, then makes the draft live.
  • Discard changes (draft ≠ live) puts the draft back to the live version; Unpublish takes the page down (visitors get the sign-in screen), the draft stays. Both ask for confirmation; if the action fails, the dialog stays open to try again.
  • Status next to the title: Not published / Published / Unpublished changes, plus "Unsaved changes" while the form has edits not saved yet.

Content

Each text field per language. A field left empty in one language shows the studio's default language (Hebrew).

Under the studio name in the hero.
Up to 140 characters.
Comma separated, up to 4. The first one is highlighted.
Plain text, line breaks kept.
Up to 1,200 characters.
Address is required while "Visit us" is on.
Validation example: clear it to see the error.

Images

JPG, PNG or WebP, up to 5 MB. Cover: 1920×1080 recommended.

Change

Opening hours

Days and times; the page shows day names in the visitor's language.

+ Add row

Contact

Template

Colors and logo always come from the studio's theme.

Habeats
More soon
More soon

Sections

Drag to reorder; switch off what the studio does not want. The hero is always first.

Address

Set in the studio settings (OH-1872). Read-only here.

ks.hygear.studio  · dev: ks.dev.hygear.studio