Sajt · Docs

Navigation map

Where every surface lives in Sajt, its URL, and how a user reaches it.

This page maps Sajt's surfaces so you can tell a user exactly where to go. URLs and reachability are grounded in the route table; see Routes for the full list.

Terminology: the UI says "company" ("företag") and "hemsida" (website). The word "workspace" is the hidden billing/account container — never surface it. One company == one website today. The URL segment under /dashboard/websites/ is the company's slug (e.g. /dashboard/websites/acme-bakery), not the raw id; bare-id URLs canonical-redirect to the slug form.

How a user moves around (the shell)

The signed-in app is framed around the company. A persistent shell is mounted once around all /dashboard/** pages:

  • Desktop: a left sidebar.
  • Mobile: a bottom tab bar.

The shell steps aside (renders the page full-screen) for the editor and for routes with no company in the path. Navigation items either route to a page or open a settings tab via the URL hash (see Settings below). A company switcher lists the user's companies and offers "+ Nytt företag" → /onboarding.

Authenticated surfaces (Clerk sign-in required)

SurfaceURLHow to reach it
Dashboard resolver/dashboardThin router: 0 companies → /onboarding; otherwise redirects to the last-used company home.
Onboarding wizard/onboardingNew-company setup; from the company switcher's "+ Nytt företag".
Company home/dashboard/websites/<company>The landing for a company: status, the loud primary Redigera hemsidan button, module shortcuts, insights, bookings. Reached from the resolver, switcher, or sidebar.
Editor/dashboard/websites/<company>/editorFull-screen visual editor. Reached from the company-home Redigera hemsidan button or the sidebar.
Appearance ("Utseende")/dashboard/websites/<company>/utseendeTheme / palette / fonts page (Swedish "utseende"). Same constrained controls as the editor's style panel.
Inbox/dashboard/websites/<company>/inboxLeads + bookings in one stream. Sidebar / bottom-bar / a company-home shortcut.
Payments ("Betalningar")/dashboard/websites/<company>/paymentsGet-paid overview: amount awaiting payment, links to offers + invoices, the invoicing profile, online-pay setup.
Offers ("Offert")/dashboard/websites/<company>/payments/offersCreate/send/convert quotes. Reached from the Payments page.
Invoices/dashboard/websites/<company>/invoicesInvoice management (now grouped under Payments in nav).
Services/dashboard/websites/<company>/servicesThe catalogue: name, price, duration, customer action, bookable.
Domain settings/dashboard/websites/<company>/settings/domainConnect/manage a custom web address + DNS. Live-credential gated.
Image Studio/dashboard/imagesAI image generate/edit, collections, library. Workspace-scoped — shared across all the user's companies, not one company.
Billing/dashboard/billingSubscription + add-ons (Stripe checkout target). Live Stripe gated.

The legacy /dashboard/websites/<company>/settings route only redirects into the company-home settings modal.

Settings (a modal, not a page)

Per-company settings is a modal mounted once around the company pages, so it overlays both the company home and the editor. It opens via the URL hash:

  • #settings — open the modal.
  • #settings/<tab> — open a specific tab.

Any trigger (the editor or company-home gear, the publish dialog) opens it; arriving from another route with #settings in the URL opens it on mount. This is where account/site configuration lives that is not its own page.

Preview surfaces (read the draft, not the live site)

SurfaceURLAccess
Owner draft preview/preview/<websiteId>/<path?>Clerk-gated; the owner's live draft.
Shareable preview link/p/<token>/<path?>A link anyone can open — public or password-gated; 30-day expiry; noindex. Created by the owner.

Both render the draft through the same renderer as the editor and the public site. They never expose the published path.

Public surfaces (no account)

SurfaceURLNotes
Published site/site/<slug>/<path?>Served from the immutable snapshot only. Also reached by subdomain (<slug>.<sites-domain>) or a custom domain that the proxy rewrites to /site/<slug>. Secondary languages live under /site/<slug>/<locale>/….
Marketing landing/Redirects signed-in users to /dashboard.
Accountless generator/createDescribe a business → instant preview; sign up only to save.
Pricing/pricingPlan cards.
What's new/whats-newUser-facing changelog.
Privacy / Terms/privacy-policy, /termsBilingual legal pages.
Downloads/downloadNative app downloads.
Marketing blog/blog, /blog/<slug>A separate file/MDX blog. In-site news articles live under a published site's /news, not here.

Auth pages: /sign-in, /sign-up, /sso-callback. The protected route matcher covers /dashboard(.*), /onboarding(.*), and /preview(.*); see Auth and permissions.

Customer-facing token pages (no account)

These are sent to a business's own customers and gate on a 256-bit opaque token:

PageURLPurpose
Team invite/invite/<token>Accept access to a company (sign-in if the email differs).
Invoice/invoice/<token>Customer views + pays an invoice.
Offer/offert/<token>Customer accepts/declines a quote.

On this page