Admin Access
Incorrect password. Please try again.
cycleWASHADMINMade in Germany

cycleWASH® Admin

CRM · Leads, pipeline & outreach
O2C · CRM

Leads & Pipeline

Every lead, opportunity and customer in one place — unified inbox, visual pipeline, Gmail and lead scrapers.

🚀 Setup status

One-time configuration to unlock Gmail, AI drafting and lead scrapers. Everything below already works with what's available.

OutreachPro · Executive view

Pipeline at a glance

Revenue
€0
paid invoices · 0
Open pipeline
€0
active offers · 0
Conversion
offer → invoice
Avg cycle
offer → paid · days
Campaign emails
0
sent · 0 campaigns
Replies
0
reply rate —

Funnel · Suspect → Customer

Source attribution

OutreachPro · Inbox

Gmail integration

Send docs as email · search threads per customer · auto-log every send and receive on the customer timeline. Uses the OAuth + send/history library ported from op-v2.

Not connected
Setup needed (one-time):
  1. In Google Cloud Console → new project → enable Gmail API.
  2. Create OAuth 2.0 client → application type Web.
  3. Add authorised redirect URI: https://cw-contact-spam-guard.vvlars.workers.dev/proxy/gmail/callback
  4. Copy the Client ID + Client Secret, paste them as worker secrets — locally run:
    cd cyclewash-theme-v3/scripts
    wrangler secret put GMAIL_CLIENT_ID
    wrangler secret put GMAIL_CLIENT_SECRET
  5. Then click Connect Gmail above. Popup opens, you approve, done.

Send via Gmail

Sent from your connected Gmail account (). The doc number is auto-included as a reference at the bottom.
ERP / Leads · Unified pipeline

One desk for every lead.

Master CSV (quoted customers, distributors, warm inbound) merged with the Exact Online snapshot and OutreachPro captures, deduped by email and sorted warm-first. NDA 3D unlocks stream in from the access log.

Unified leads
Quoted customers
Distributors
Warm inbound
NDA unlocks
Pipeline value
NameCompanyEmailCountryTierSourceStage
Activate this tab to load the unified lead list.

NDA 3D Leads

Verified OTP unlocks from the 3D configurator NDA gate — the warmest signal we get. Loads from the worker audit log (admin key required, stored locally).

Finance

Order revenue & invoice roll-up.

Dataset built offline by scripts/build-leads-unified.cjs — re-run it and push the asset to refresh. Row click or Enter expands the full record.

Lead scrapers

Pull prospects from any website. API keys stay in your browser — never sent to Shopify.

3 adapters · live

Get a key at scrapegraphai.com. Stored only in this browser.

Get a token in Apify Console → Integrations. Stored only in this browser.

Browse the full store at apify.com/store. Actor IDs use the username~actor-name format.

Preview the generated AI prompt Preview the generated Apify actor input

    

Extracted leads

No runs yet.

Nothing scraped yet. Configure an API key on the left, paste a URL and a prompt, then click Run.
OutreachPro · Outbound Engine

Email Campaigns

Compose with Gemini · send via Gmail in throttled batches · stats land in the dashboard above. Audience comes from any combination of Apify, ScrapeGraph, Gmail crawler, pipeline cards, or pasted email lists.

0Campaigns
0Emails sent
0Replies
📣

No campaigns yet

Launch your first outbound campaign — pick a lead source, draft a template with Gemini, send in batches via Gmail.

New Campaign

Step 1 of 4 · Pick audience

Pick where your recipients come from. You can combine multiple sources.

0 recipients matched.
Platform · IoT & Backend

SPIRIT — Digital Ecosystem

Hardware + Software + Coin Economy · 56+ App Routes · 24 Revenue Features · 8 Languages

56+
App Routes
24
Revenue Features
3
Portals
8
Languages
$89M
FY5 Target

Four Integrated Platforms

v3 Architecture
🛍️
Shopify Website
19 pages · 8 languages · SEO optimized · Bauhaus Industrial design
SPIRIT Web App
56+ routes · 3 portals · Real-time analytics · $CYCLE coin
📱
Mobile Apps
iOS + Android · Capacitor PWA · Push notifs · Camera QR scan
🤖
Walter IoT
ESP32-S3 · MQTT over TLS · PLC pulse control · OTA updates

End-to-End Architecture Flow

Live
CUSTOMER
Register → Scan QR → Pay $CYCLE → Wash → Earn Tokens
OPERATOR
Dashboard → Fleet Mgmt → Revenue Analytics → Token Admin
TECHNICIAN
Diagnostics → Live Sensors → Service Tickets → Firmware
TRANSPORT LAYER
MQTT pub/sub · Stripe + $CYCLE · JWT Auth · Vercel + Shopify

3 Portals — Route Breakdown

📊 Operator Dashboard 21 pages
Fleet Overview · Machine Detail · Payments · Revenue Analytics · Customer Analytics · AI Scanner · Predictive Maint. · Demand Forecasting · Climate Tech · QR Generator · Dynamic Pricing · Social Media Hub · B2B Partners · Lead CRM · City Intelligence · White Label · API Marketplace · $CYCLE Coin Econ.
📱 Customer App 23 pages
Home · QR Scanner · Wash Flow · Subscriptions · Bike Health · $CYCLE Wallet · Referrals · Token Store · Pay-Per-Minute · Insurance · Strava Connect · Social Receipts · Group Wash · Weather & Wash · Marketplace · Repair Booking · E-Bike Charging · First Wash Free
🔧 Technician Portal 6 pages
Ticket Management · Live Diagnostics · Sensor Telemetry · Firmware Updates · Service History · Remote Commands

Walter ESP32-S3 — IoT Firmware

Hardware Bridge
GPIO Configuration
GPIO 4 — PLC Pulse Output
GPIO 5 — Door Sensor
GPIO 18 — WS2812 LED Strip
GPIO 21 — Water Flow Sensor
GPIO 22 — Emergency Stop
MQTT Commands
START_WASH {type, duration}
STOP_WASH {reason}
TEST_PULSE {count}
STATUS {}
REBOOT {delay}
SET_MODE {mode}
Default: Mini 3min · Pro 5min · 5 pulses/cycle · 30s heartbeat · WiFi auto-reconnect · OTA updates

Technology Stack

⚛️
Frontend
Next.js 14 · Tailwind CSS · Framer Motion · React Server Components
🔌
Backend
Next.js API Routes · Stripe SDK · $CYCLE Coin Engine · JWT Auth
📡
IoT Layer
ESP32-S3 · MQTT over TLS · PLC Pulse Control · WS2812 LED
🌐
Website
Shopify 2.0 Liquid · Bauhaus Theme · 8-lang i18n · SEO + Schema
🪙
Coin Economy
$CYCLE ERC-20 · Stripe Fiat On-ramp · Cashback Engine · Burn Controls
☁️
Hosting
Vercel (SPIRIT App) · Shopify (Website) · HiveMQ (MQTT) · GitHub CI/CD

Product Roadmap

Q2 2026
SPIRIT App v1 · Walter firmware v1 · Stripe payments live · 10 pilot stations · $CYCLE testnet
Q3 2026
iOS + Android apps · AI Scanner beta · Corporate programs · 50 stations · Token mainnet
Q4 2026
Predictive maintenance · White-label platform · API marketplace · 150 stations · Strava integration
2027
City Intelligence · Full franchise model · 500+ stations · International expansion · Series A funding
SPIRIT · ONLINE

SPIRIT Operator Dashboard

Fleet analytics, machine health, customer data. Each view opens at the correct viewport size — Shopify blocks iframing storefront pages, so we use popups.

https://cyclewash.com/pages/spirit-dashboard

SPIRIT Backend — Docker Setup

Self-Hosted

Full-stack SPIRIT platform: API (Node.js + Prisma + PostgreSQL), web dashboard (React + Vite), MQTT broker, Redis cache.

git clone https://github.com/vvlars-cmd/cyclewash-spirit-platform.git && cd cyclewash-spirit-platform

Copy environment and start:

cp .env.example .env && docker compose up -d --build

Seed database (first time):

docker compose run --rm api npm run db:migrate && docker compose run --rm api npm run db:seed

Default credentials: admin@cyclewash.io / Admin123! · API: localhost:3001 · Dashboard: localhost:3000

Confidential · Series A

cycleWASH® — Investor Proposal

The World's First Automated Bicycle Washing Machine · Series A — €3M · March 2026

cycleWASH® Investor Deck v2

Confidential

Series A · €3M · 40% manufacturing · 25% SPIRIT platform · 20% sales · 15% operations

💼 View Full Deck
31+
Patents
250+
Machines Deployed
19
Countries
1M+
Bikes Washed
150M L
Water Saved

Product Lineup — Three Lines for Every Use Case

🚲 €5,990
cycleWASH® Mini
Euro-pallet footprint · Self-service kiosk · Solar option · Perfect for bike shops, campuses, residential
⚙️ €12,990
cycleWASH® Pro
Full-size automated wash · Hybrid brushes · Integrated drying · Connected diagnostics · High-throughput
🏙️ Custom
cycleWASH® OASIS
Complete bike service station · Wash + repair + charging + vending · For cities and transit hubs

Technology & IP — 36 Patents · 7-Year Head Start

🔬
Hybrid Brush System
Patented dual-brush adapts pressure for carbon frames, e-bikes, fat tires
💧
3 L Per Wash
Closed-loop recycling. Up to 80% less water than manual washing
🤖
Walter IoT
ESP32-S3 · 12 sensors · MQTT telemetry · OTA · Predictive maintenance
DEKRA Certified
Only certified automated bike wash worldwide for unattended public operation
☀️
Solar Ready
Mini stations run 100% solar-powered. Zero grid dependency
💨
Gentle Dry System
Integrated blower drying protects bearings and electronics. No water spots

Revenue Projections — Path to €10M ARR by 2028

€0.8M
2024
€1.2M
2025
€2.5M
2026E
€5.5M
2027E
€10M
2028E
Assumptions: 40% hardware margin · 80% SaaS margin · 500 new units/yr by 2028 · €99 avg SaaS ARPU

Series A — €3M Use of Funds

Open Round
40%
Manufacturing Scale-up
Expand production to 500 units/year
25%
SPIRIT Platform
Payment integration, AI features, mobile apps
20%
Sales & Marketing
EU expansion, trade shows, channel partners
15%
Operations & Team
Key hires in engineering and business dev

What Investors Get

Equity in the only certified automated bike wash company
36 patents providing 7-year competitive moat
250+ machines already generating recurring revenue
58-route digital platform ready for scale
$CYCLE coin economy creating network effects
€10M ARR target by 2028
Path to €50M+ exit via strategic acquisition
ESG-aligned investment (UN SDG 11
12
13)

Go-to-Market — Land & Expand Across 4 Segments

🏪
Bike Shops & Dealers
50K+ in Europe · Direct sales + demo program · Dealers become wash operators
🏙️
Cities & Transit
1,000+ cities · Municipal procurement · Bike-sharing fleet integration
🏢
Corporate Campuses
Fortune 500 · Employee bike programs · ESG reporting · Bulk fleet orders
🏨
Hospitality & Tourism
Hotels, Camping · Guest amenity upsell · OASIS installations at resorts

Let's Clean Up the Cycling World

Contact Sachin Kumar — CEO & Founder · CW Cleaning Solutions GmbH · Cologne, Germany

📧 sachin.kumar@cyclewash.de  ·  🌐 cyclewash.com
📬 Contact IR Team
LIVE INVESTOR PAGE

Open the investor page

See exactly what investors see. Shopify blocks iframing storefront pages via X-Frame-Options: DENY, so we open in a popup or new tab instead.

https://cyclewash.com/pages/investors
↗ Open in new tab
Why popup instead of iframe? Shopify sets X-Frame-Options: DENY on every storefront page to prevent clickjacking. That's an HTTP header — no theme setting can override it. Popups simulate the viewport size exactly as investors would see it.
Live · IP Portfolio Tracker

Patent & trademark dashboard

Live mirror of Übersicht aller Schutzrechte. Filings grouped by family, annotated with fee due dates and renewal deadlines. Click a family card to expand or collapse its register entries.

Family
Status
Reading the dashboard. Fee due in < 90 days Fee due in < 180 days Fee due later Renewal / maintenance
Source: assets/cyclewash-ip-tracker.json — regenerated when the Übersicht aller Schutzrechte XLSX changes. To refresh, replace the XLSX and run scripts/build-ip-tracker-json.py.
Internal · AI Authoring

Content Generator

SEO- and AEO-optimised blog drafts, social captions and press copy for cycleWASH. Send to the blog-agent backlog and the next Mon/Thu run picks them up automatically.

New draft

Output

Nothing generated yet. Pick a content type, topic, audience and language on the left, then hit Generate Draft.
SEO metadata appears here. Title tag, meta description, slug, primary keyword and OpenGraph tags — one click to copy.
AEO JSON-LD appears here. Article + FAQPage schema, ready to paste between <script type="application/ld+json"> tags.
Social variants appear here. LinkedIn, Instagram, Facebook, TikTok — channel-fit length and tone.
Content · Blog

cycleWASH Journal

20 published articles. Read the live blog, or write & edit posts in Shopify's article editor — new drafts and edits publish straight to the storefront blog.

Journal Editor

Write and save drafts to Shopify — all from the admin. Drafts autosave to this browser.

Shopify editor ↗ Idle

Create

Publish to

Long-form writing saved as a draft in /blogs/news/.

Articles

View journal →
  • Loading…

Edit loads an entry into the form below. Save draft keeps it in this browser. Save draft to Shopify sends it as a draft (not yet published) via the Shopify Admin API.

Write a new article

Editing a new draft

Body

Site Background

Animated background shown behind page content. Applies in this browser across the whole site.

Brand & Visual System · v1 · June 2026

The cycleWASH visual system.

The canonical reference for anyone extending cycleWASH — designer, developer or partner studio. The language is Liquid Precision: German engineering clarity fused with the energy of water in motion. Precision is the aesthetic; restraint is the system.

01

Colour

Four named colours. Use the named tokens — never hard-code new hex values. The brand is light by default; Mist White is the daylight home, Midnight Ink is reserved for the 3D theatre and hero stages.

#1E82C8
Glacier Blue
PRIMARY
Interactive elements and focal points. Engineering trust, water, precision. Links, primary buttons, data accents.
#FFC300
Signal Gold
SECONDARY
The spark. CTA highlights and key signals only — the one action that matters per view. Never decoration.
#F0F4F8
Mist White
TERTIARY
The light — reading surfaces, product pages, sustained content. Bands alternate Mist ↔ pure white.
#1A1A2E
Midnight Ink
NEUTRAL
Typography and the dark stage. The 3D theatre, NDA posters and hero stages live one step deeper: #0B0F14.
Guardrail. Signal Gold is reserved for interaction and the single most important signal — never decoration. Don't add a fifth named colour. Depth comes from tonal layers (stepping Mist→Ink), not drop shadows; if a shadow is unavoidable, make it very large and ultra-soft.
02

Typography

Two families plus one editorial voice. Outfit carries the brand; Inter keeps it legible; Playfair Display speaks only in the Journal.

OUTFIT · DISPLAY & HEADLINES · 700–800tracking −0.02em
Engineered to keep
every bike rolling.
INTER · BODY, LABELS & UI · 400–700system fallback

Sentences are short and weighted. We name things by what they do — wash, dry, protect, recirculate — and we prove claims with numbers: 99% water recycled, 3 minutes per bike, 36 patent filings. Eyebrow labels are uppercase with .18em tracking.

Display 52H1 44H2 30H3 20Body large 16Body 14Eyebrow 11 · caps
PLAYFAIR DISPLAY · JOURNAL ONLY · 700editorial accent
Stories from the wash bay.

The serif appears exclusively in Journal heroes and headlines — the one place the brand slows down. Never in UI, never on product pages.

03

Logo & mark

The official 2016 mark: a water droplet carrying the rotating gold wash-cycle arrow. The wordmark pairs gold lowercase “cycle” with blue “WASH”.

cycleWASH official logo
  • Construction — Glacier Blue droplet outline (the water) around a Signal Gold rotating arrow (the wash cycle) with a blue hub. Wordmark: cycle in gold lowercase, WASH in blue caps.
  • Clearspace — one droplet-width on all sides; never crowd the mark.
  • Backgrounds — designed for white/light surfaces; on midnight, place it on a white chip. Never recolour, outline or rotate.
  • Source files — Dataroom › E. Marketing › cycleWASH Logo Datensatz 2016-04 (EPS/PDF, CMYK + RGB); web SVG ships with the theme.
04

Layout & depth

  • 8 px base unit; container max-width 1240 px, centred, 24 px side padding.
  • Section rhythm: 88 px band padding desktop / 56 px mobile; bands alternate Mist ↔ white ↔ midnight.
  • Cards: radius 16–20 px; buttons and inputs 10 px; pills 100 px.
  • Weight content toward the centre — negative space is engineering, not emptiness.
  • Depth = tonal layers; shadows only as 0 20px 48px -28px rgba(13,17,23,.45).
  • Hairlines: 1 px rgba-blue on light, #2E3140 on dark.
  • The 3D theatre is always full-bleed midnight with a single gold or blue accent.
  • Performance is part of the design: lazy-load below fold, content-visibility on long pages.
05

Motion

Water is the only thing allowed to move freely. Everything else moves like machinery — precise, damped, once.

  • Reveals: translateY 14 px → 0, .6 s ease-out, stagger 80 ms, play once.
  • Hovers: −2 px Y over 200 ms; buttons may deepen one ramp step.
  • 3D turntable: continuous, slow (≈12 s/rev), pointer-interruptible.
  • Bubbles & water effects: brand-coloured (blue/gold), physical, never looping ads.
  • No bounce, no parallax scroll-jacking. The brand does not jump.
  • Respect prefers-reduced-motion — reveals become fades.
06

Application

How the system behaves — light where functional, midnight where the machines perform.

LIGHT SURFACE
Mist White
Product pages & sustained reading. The brand's daylight home.
DARK SURFACE
Midnight Ink
3D theatre, hero stages, NDA posters. Where machines perform.
ACCENT
Primary Gold CTA
Glacier Blue interactive · Signal Gold for the one action that matters.
07

Reference sheet

The one-page palette & style sheet — drop it into decks, briefs and partner handoffs.

cycleWASH palette and style reference sheet
Download palette (SVG)
cycleWASH® — Bicycle washing systems. Made in Germany. Liquid Precision · pair with the Palette & Style Reference
Handbook · How this admin works

Every tab, in plain language.

This is the manual for the cycleWASH admin panel. One block per tab: what it is for, what you can actually do in it, and what to watch out for. Open a block by clicking its title. If you only read one thing, read Getting started and Where your data lives.

🚀Getting startedunlock, navigate, dark mode

Unlocking. The panel opens on an Admin Access card. Type the admin password and press Unlock Admin Area → (or just hit Enter). The eye icon next to the field shows what you typed. A wrong password shakes the card and clears the field — there is no lockout, just try again.

Session. You stay unlocked while you are working. After 5 minutes with no clicking, typing or scrolling the password card comes back. Anything that reloads the page (for example ImagePipe's Publish button) can also bring it back.

Navigating. The tabs run across the top: CRM, Documents, Deal Simulator, Finance, Automation, Content, ImagePipe, SPIRIT, Investors, Patents, Brand, Help, Keys. The left sidebar shows the same tabs grouped into three apps — cycleERP (O2C: CRM, Documents, Deal Simulator, plus Automation), Studio (Content Generator, ImagePipe) and More (SPIRIT, Investors, Gallery Manager, Patents, Brand). Top tabs and sidebar links do the same thing; use whichever you prefer.

Dark mode is the default across the whole site, admin included. The Brand tab also has a background-effect switch (Lava / Bubbles / Off) that applies to your browser everywhere on the site.

Leaving. ← Back to site in the top bar or the sidebar returns you to the storefront. Sign out shows the password card again.

Note. The password is checked in the browser, not on a server. Treat the admin page URL and the password as internal information — do not share the link with the password.
🗄️Where your data livesShopify, the Mac app, your browser
  1. Shopify is the single source of truth. Leads, quotes, invoices and closed accounting periods are stored on the shop as metaobjects (cw_lead, cw_quote, cw_invoice, cw_ledger_period), and this admin reads and writes them through the cyclewash-admin-proxy worker. Orders and customers stay native Shopify records — nothing is duplicated.
  2. The local cycleERP app on the Mac does the heavy work. It lives in ~/cycleERP (Docker, web UI on http://localhost:8765) and owns the raw ledger, the BWA / period close, the DATEV export and the bulk outreach sending; it pushes only the computed summaries up to Shopify. DATEV and tax data never leave the Mac.
  3. Your API keys stay in your browser. Gemini, fal.ai, ScrapeGraph, Apify and the Gmail connection are stored in this browser only — never in Shopify, never in the theme. A new laptop, a different browser or clearing your browsing data means entering them again.
  4. Drafts are not published. Everything the Content tab saves to Shopify is saved as a draft. Making something public is always a separate, deliberate step in the Shopify admin.
Rule of thumb. If a number looks wrong in the web admin, check the local app first — it computes, Shopify stores, this panel displays.

The tabs

📊CRMleads, pipeline, Gmail, scrapers, campaigns

What it is for. Your daily desk: every lead, the pipeline board, your mailbox and the tools that find new prospects.

  • Pipeline at a glance at the top: switch between Month, Quarter, Year and All-time for revenue, open pipeline, conversion, average cycle, campaign emails and replies, plus a funnel and source breakdown.
  • Leads desk. Switch between 📋 List and 📊 Board. In List you get search (name, company, email), tier chips (Quoted, Distributors, Warm inbound, OutreachPro, Exact only, NDA), a source filter, 50 rows per page, and Download CSV which exports exactly what the filter is currently showing. Click a row to expand the full record.
  • Board. Six columns — New, Contacted, Qualified, Opportunity, Won, Lost — with a lead count and a weighted euro value per column. Drag a card, or use the little stage dropdown on the card. Export stages JSON / Import stages JSON / Reset moves let you back up and restore your manual moves.
  • Gmail. Connect Gmail opens Google's consent screen. You then get your folders and labels on the left and threads on the right, a reader with ↩ Reply via Gmail, ✨ AI Summarize + Draft and + Add sender to pipeline, and a ✉ Compose window with attachments. The Folder Crawler below scans selected labels over a date range and pulls out every contact you have exchanged mail with, then offers Export CSV or + Push all to pipeline.
  • Lead scrapers. Three lanes: OpenStreetMap (free, no key), ScrapeGraph and Apify. Fill in keywords, industry, country, city and size, run it, review the results, keep what you want.
  • NDA 3D leads. Load NDA access log shows everyone who unlocked the 3D configurator behind the NDA gate; each row can be merged into the lead list.
  • Email campaigns. A four-step builder: 1 Audience → 2 Template → 3 AI Polish → 4 Review & Send, with merge tags, starter templates and a send rate in seconds between mails.
Scrapers: only OpenStreetMap is free. ScrapeGraph and Apify are paid outside services — you need your own account and API key (enter them here or in the Keys tab), and every run costs money on their side.
Board moves are saved in this browser first. The push up to Shopify happens quietly in the background with no success message, and Reset moves only clears the local copy. Export your stages before resetting if they matter.
Campaign test mode. The checkbox says "only send to me", but it actually sends one real email to the first matching recipient. Put your own address at the top of the list, or leave campaigns off until this is fixed. The "Replies" counter is never filled in and will always read 0.
Gmail AI draft needs the Gemini key (Keys tab). The price list and promotion wording it uses are written into the theme, so check numbers and dates in any AI draft before you send it.
📄Documentsoffer → invoice → delivery note, as real PDFs

What it is for. Turning a Shopify order or draft order into a proper German/English sales document as a PDF.

  • 1. Pick order. Start typing an order number or a customer name. Draft orders are listed first (amber Draft badge), live orders after (Live badge). ↻ Reload refetches the list.
  • Set the details on the left: reference number (leave blank and one is generated), document date, valid-until date, VAT handling (Auto by shipping country, 19% MwSt, 0% EU, 0% Export), payment terms (prepayment, on receipt, net 14, net 30) and document language (Deutsch or English).
  • 2. Generate. Six document types: Offer (Angebot), Sales Order (Auftragsbestätigung), Proforma Invoice, Invoice (Rechnung), Packing List (Packliste) and Delivery Note (Lieferschein). Click one and the PDF is built and shown in a preview window.
  • From the preview you can ⬇ Download PDF, ☁ Save to Shopify or open 📁 Saved documents. Saving happens automatically the moment the document is generated — the button is only a retry.
  • Saved documents keeps everything in folders (Offers, Sales Orders, Proforma Invoices, Invoices, Packing Lists, Delivery Notes). Per row you can download, archive (hide, reversible) or remove.
  • Document style sets the accent colour, logo on/off, company address, e-mail, web, VAT ID, bank, IBAN and BIC for all future documents.
Documents needs the admin proxy token. Order lists come from Shopify through the proxy worker. If the token is missing or wrong you get a red ✕ HTTP … line under the order box, no orders load, and all six document cards stay greyed out. Fix it with the small button at the top of the pick-order card: paste a Shopify custom-app token starting with shpat_ with the read_orders and read_draft_orders permissions, then Save & Reload Orders.
Reference numbers are not sequential. An auto-generated number like CW-RE-2026-4821 ends in random digits. If your bookkeeping needs a continuous invoice sequence, type the number yourself in the Reference # field.
Changing the document style does not update documents you already made. Regenerate them if the address or bank details changed.
💰Deal Simulatorwhat a discount really costs you

What it is for. Working out, before you promise anything, whether a discounted deal still makes money — and how far you can go.

  • Presets load a machine in one click: Mini Basic, Mini Platinum, Pro Black, Pro Platinum, OASIS. ⚡ Load Black Deals loads the promotion configuration.
  • Machines in this deal — add as many lines as you like with + Add machine, each with quantity, net unit price and its own margin percentage.
  • The discount slider is the main control. Under it you set the cost of the free cleaner and free commissioning per machine, the distributor/channel margin, your margin floor (the lowest margin you are willing to accept) and the deposit percentage.
  • Read the four numbers: Customer net, Gross profit, Gross margin % and Margin given away.
  • The verdict banner tells you where you stand: ✅ Healthy (above your floor, and how much more you could discount), ⚠️ Below floor (with the maximum discount that still holds the floor) or ⛔ Loss-making (you are selling below cost).
  • Turn this into a quote — enter the customer e-mail, optionally tick "also create Shopify draft order", press 💾 Save quote. The deal is stored on Shopify as a cw_quote record.
  • Deal content at the bottom generates ready-to-copy promotion text (campaign name, valid-from/until, order-by date, language), or hands the brief over to the Content Generator.
The preset prices belong to the simulator, not to your shop. They are written into the tool and do not update when you change a product price in Shopify. Check the unit price before you quote from it.
Saving a quote uses the admin proxy, the same connection as the Documents tab. If that is not working, the quote will not save.
📈FinanceBWA, P&L and open invoices — read only

What it is for. Looking at the books: period results computed by the local cycleERP app, and the list of invoices that are still unpaid.

  • Four headline numbers for the latest closed period: Revenue, Gross profit, Opex and Net result.
  • Periods · BWA / P&L — every closed period, newest first, with revenue, COGS, gross profit, opex, net, when it was computed, and a BWA link that opens the snapshot file the local app uploaded.
  • Open items (AR) — every invoice that is not marked paid, with amount, due date, days overdue in red, status and a link to the PDF, plus a Total open line.
  • DATEV exportOpen local cycleERP ↗ takes you to the local app where the export is generated; Re-check tests whether that app is currently running.
  • Reload refetches everything from Shopify.
Nothing is calculated here. If the tables are empty, no period has been closed yet. Start the local app (~/cycleERP, http://localhost:8765), run the period close there, let it sync, then come back and hit Reload.
Paid invoices are hidden on purpose. This card is the open-item (OPOS) view, not an invoice archive.
DATEV never leaves the Mac. This browser tab does not and will not compute or upload DATEV or tax data — only the computed period summaries you see above are ever synced to Shopify.
Automationevent → rule → action

What it is for. Making the system react on its own: when something happens, check some conditions, then do something.

  • How automation works is a short explainer you can fold open at the top. In one line: an event happens, a rule listening to that event checks its conditions, and if they all match its actions run.
  • State machines show the allowed paths. An entity only ever moves along the arrows — nothing can jump a stage.
  • Active rules lists what exists, each with an enable/disable toggle.
  • + New rule opens a builder with no JSON typing: give the rule a name, pick the WHEN event, add IF conditions (all must match; no conditions means it always fires) and THEN actions (they run in order). A live JSON preview shows exactly what will be saved. Then Save rule, Copy JSON or Cancel.
  • Recent activity shows rules that actually fired, plus a separate list of your own dry-runs from this browser.
  • Test is the dry-run console: pick an event, edit the little payload, press Run dry ▶ and see which rules would match — without anything actually happening.
Save mode: local draft. The rules service is not yet able to accept new rules, so Save rule currently keeps the rule in this browser. Use Copy JSON and paste it into the automation_rule record to make it real. The tab always tells you at the top which mode is live.
The enable/disable toggles are a local view flag for the same reason — they change what you see, not what the service does.
📝Contentdraft copy, pick images, write the Journal

What it is for. Producing blog posts, social captions and help articles — and saving them into Shopify as drafts.

  • Left: the brief. Choose content type (Blog Post, LinkedIn, Instagram Reel, Facebook, TikTok, Press Release, Newsletter), topic, target audience and language, add any extra context, then press ⚡ Generate Draft.
  • Five output tabs fill in at once: Content, SEO Meta, AEO Schema, Social and Internal links, with an SEO and AEO score above them.
  • Three buttons under the output: + Append FAQ, 📋 Copy active tab and ✉ Send to backlog →.
  • Right: media. Three sub-tabs — Library (everything already synced, filter by source and category), Generate (write a prompt, pick an aspect ratio, press ✦ Generate image) and Capture (text read out of your captured images; click a quote to drop it into the draft). Click several library tiles to select them in order, then use ↳ Insert into draft or ⚡ Queue + schedule.
  • Journal Editor at the bottom. The Publish to switch chooses 📓 Journal or 🛟 Help Center. Fill in title, slug, tags, author, lede and hero image, write the body, then Save draft (this browser) or Save draft to Shopify.
Articles save as DRAFTS. Nothing in this tab can publish. After Save draft to Shopify the article exists on the shop but is invisible to visitors — open it in the Shopify admin and publish it there.
The generator is a template, not an AI. It assembles pre-written scaffolding from your brief. Treat the result as a starting skeleton and rewrite it. If you pick a language other than English you get the English template with a note telling you to translate it.
Help Center articles are Journal drafts tagged help. There is no separate help blog. If that tag is removed, the article reappears in the public Journal list instead.
Image generation needs the fal.ai key (Keys tab). Without it, ✦ Generate image reports that the media service is not ready.
🌍Translationsthe storefront and blog in 9 languages, mostly automatic

The site runs in English plus 9 languages — German, French, Spanish, Italian, Dutch, Portuguese, Japanese, Korean and Chinese. There are two separate things that get translated, handled two different ways.

The interface (buttons, product specs, navigation, FAQs) is translated in the theme's own language files and is 100% complete in all 9. Nothing to do here; it is part of the theme.

Blog articles live in Shopify's database, not the theme, so they are translated by a machine translator (Gemini) and written back to Shopify as real translations. Two ways this happens:

  1. New articles translate themselves. In the Content tab's Journal editor there is an “Auto-translate to 9 languages on save” checkbox, on by default. Save an article and, a few seconds later, it exists in all 9 languages. A small toast counts them off (“Translating German… 1/9”) and ends with “Translations: 9 live”. You never touch it.
  2. The existing backlog was translated in one bulk pass with a script (scripts/blog-i18n-backfill.mjs). You would only re-run it if you imported a batch of old articles that pre-date the auto-translate checkbox — it skips anything already translated, so a re-run is safe and only fills gaps.

What is protected. Brand and product names — cycleWASH, LuftWASH, AntiGravity, ECO, STANDARD, Mini, Pro, OASIS — are kept in English in every language. Numbers, units and the HTML layout of an article are preserved exactly; only the readable text changes.

Seeing a translation. Add the language prefix to any blog URL: /de/blogs/news/… for German, /fr/… French, /pt/… Portuguese, /zh/… Chinese, and so on. The prefix is the short code even where the language is a regional one (Portugal, Simplified Chinese).

Requirements, already set up. Auto-translate needs two things that are in place: a Gemini key in the Keys tab, and the translations permission on the admin app. If either is ever missing, the article still saves and a toast tells you exactly which one to restore — it never fails silently.
📸ImagePipethe media library and where images appear on the site

What it is for. Browsing every photo and video in the media library, and deciding which image sits in which spot on the website.

  • Four views: Gallery (all media, filter by category, click for a full-size lightbox), Produced (text the pipeline generated, each with a Copy button), ⌂ Site and 🗂 Manage.
  • Search and category chips at the top narrow the grid; Full screen gives the gallery the whole window (Esc leaves).
  • Site view lists every page of the website — click one to open it in visual edit mode in a new tab. Below that, shop products can be opened with ◎ assign images to attach gallery images to a product carousel.
  • Manage points at the Gallery Manager for reordering, recaptioning, adding and deleting public gallery items.
  • With the local ImagePipe app running you also get a ● local pipe · edit mode badge and a gold Publish button, and each image in the lightbox gains Move (change category), + Tag, ◎ Place (put it in a named slot on the site) and ✦ Social (write a caption from the website copy).
Editing only works on the Mac that runs the pipeline. The tab talks to a local app on localhost:8787. On any other computer the tab is silently read-only — no error appears, the edit controls and the Publish button simply are not there. That is expected.
Publish reloads the page. If your 5-minute session has lapsed, the password card comes back afterwards. That is normal, just unlock again.
Use the sidebar entry for the Gallery Manager. The button inside the Manage view does nothing; the working link is 🖼️ Gallery Manager in the left sidebar under "More".
💬Testimonialscustomer quotes, shown above Proven Performance

What it does. Real quotes from real customers, rendered at the top of the Proven Performance block — so every product page closes with customers first, then the figures that back them up. Entries are stored on the shop, not in the theme, so one edit here updates every page at once.

Adding one. Press + Add testimonial, fill the card, then Save. Company, Person quoted and the Quote are required; an entry missing any of the three is skipped rather than rendered half-empty. Website URL must start https:// or it is ignored and the company shows as plain text. Role is optional.

The logo. Press Upload logo to Shopify and pick a file — it goes straight to the Shopify CDN and the link fills itself in. You can also paste a CDN link from Content → Files, or type the filename of an image already in the theme. Either way the preview under the field loads the real image, so a wrong path is obvious before you save rather than after it is live.

Ordering and removing. Each card has / to move it and Delete to drop it. Nothing takes effect until Save; dropping from several entries to fewer asks for confirmation first.

If Save fails. Copy JSON puts the whole list on your clipboard and Metafield editor ↗ opens the same field in Shopify admin, where you can paste it by hand. Same destination, manual route.

Only publish people who have agreed to be quoted. This section deliberately ships with no example entry — an invented testimonial is the one mistake here that costs real credibility. With no entries saved, the section renders nothing at all: no heading, no empty space.
🔧SPIRITthe IoT platform reference — read only

What it is for. A reference sheet for the SPIRIT platform: the app, the operator and technician portals, and the Walter controller in the machines. Nothing here is editable.

  • The four platforms and the end-to-end flow between customer, operator, technician and the transport layer.
  • Route breakdown for the three portals: Operator Dashboard, Customer App and Technician Portal.
  • Walter ESP32-S3 — the hardware pin layout and the commands the machine understands (start wash, stop wash, test pulse, status, reboot, set mode), plus the default cycle timings.
  • Technology stack and the product roadmap by quarter.
  • Four preview tiles open the live portals in correctly sized popup windows: Operator Dashboard (desktop), Customer App (mobile), Technician Portal (tablet) and Platform Overview. The 📋 button copies the dashboard link.
  • Docker setup with copy-ready commands for running the backend yourself.
Allow popups for this site, otherwise the four preview tiles are blocked. They all reuse one window, so opening a second tile replaces the first. Shopify does not allow these pages to be embedded, which is why they open as popups rather than inline.
Do not screen-share this tab. The Docker section prints the default backend login in plain text.
💼Investorsthe Series A story — read only

What it is for. The investor narrative in one place, so you can show it or send it without hunting for slides.

  • Key metrics, the product lineup with indicative prices, the technology and IP summary and the revenue projection chart.
  • Series A use of funds and what investors get.
  • Go-to-market by segment and the contact card for the IR enquiries.
  • 💼 View Full Deck opens the public investor page; 🔗 Copy Share Link copies its address.
  • Preview buttons show the live investor page at desktop, tablet and mobile size, or ↗ Open in new tab.
Everything on this tab is written into the theme, not pulled from live data. To change a figure, the page itself has to be edited — the numbers will not update on their own, and they do not always agree with the Patents tab.
Small display quirk. Both 🔗 Copy Share Link buttons are wired to the same label, so clicking the lower one makes the upper one flash "Copied". The link is still on your clipboard.
🛡️Patentsthe IP portfolio and fee deadlines — read only

What it is for. Keeping an eye on the whole protection portfolio — patents, utility models, registered designs and trademarks — and on which fees fall due next.

  • Four counters: active filings, granted, pending and fees due in the next 90 days.
  • Filter by family, by status (Granted / Pending / Abandoned), or tick Only entries with upcoming fees to see just what needs paying.
  • Family cards group the filings; click a card header to fold it open or closed. Each row shows country, reference, type, status and the next fee with a coloured dot.
  • The legend explains the dots: red for a fee due within 90 days, amber within 180 days, blue later.
  • PDF, XLSX and Register download the underlying overview files.
This tab is a mirror, not a live register. The data comes from a file inside the theme that is rebuilt from the DPMA overview spreadsheet. It only changes when someone regenerates and redeploys it — check the date in the legend before trusting a deadline.
Already-overdue fees show a red dot but are not counted in the "Fees due < 90d" number, which only counts fees still in the future. Scan the rows, not just the counter.
🎨Brandthe visual system, plus the background switch

What it is for. The canonical brand reference for anyone designing or building something cycleWASH — agency, developer or partner.

  • Site Background at the top: 🌋 Lava, 🫧 Bubbles or ✨ Off.
  • Colour — the four named colours (Glacier Blue, Signal Gold, Mist White, Midnight Ink), what each is for, and the rule that gold is reserved for the one action that matters.
  • Typography — Outfit for the brand, Inter for legibility, Playfair Display only in the Journal, with the size scale.
  • Logo & mark — construction, clearspace, background rules and where the original source files live.
  • Layout & depth and Motion — spacing rhythm, radii, hairlines, and how animation should behave.
  • Reference sheet — the one-page palette and style summary to drop into decks and partner handoffs.
The background switch is personal. It applies to the whole site in your browser only — it is not a shop-wide setting and visitors will not see your choice.
🔑Keysone place for every API key

What it is for. Entering and clearing the keys that the other tabs need, without hunting for the field that owns them.

  • Each key gets a card with a masked field, a show/hide eye, Save and Clear, and a status pill reading Set or Not set.
  • Gemini AI (free tier) — powers the AI e-mail drafting in Gmail and the campaign polish step. Get one from Google AI Studio.
  • FAL.ai Images (paid) — AI image generation in Content Studio → Generate.
  • ScrapeGraph (paid) and Apify (paid) — the two paid lead-scraper lanes.
  • Shopify Admin token — lets the CRM and the document generator read orders and products.
  • Admin proxy password — leave it blank unless you were told otherwise; blank means "use the default".
  • Gmail OAuth is shown here but connected from the Gmail panel in the CRM tab.
Keys live in this browser only. They are never stored in Shopify or in the theme. Clear your browsing data, switch browser or move to another computer and you will have to enter them all again. Nobody else can see them, and nobody else inherits them.
OpenStreetMap needs no key — it is the free scraper lane and always works.
Two keys are not in this vault. The NDA audit key is asked for by a popup in the CRM tab the first time you load the NDA log, and the Shopify token used for order documents is entered with the button in the Documents tab (that one is stored on the server, not in your browser).
📖Helpthis handbook, help articles, platform docs

What it is for. Everything explanatory in one tab: this handbook, the published help articles, and the SPIRIT platform documentation.

  • This handbook — the blocks you are reading now.
  • Help articles — the guides written for customers. They appear here and on the public help page.
  • SPIRIT Platform Documentation — the longer technical reference, available in every shop language.
To add a help article, go to Content → Journal Editor, set Publish to to 🛟 Help Center, write it and press Save draft to Shopify. Like every article it is saved as a draft — publish it in the Shopify admin before it appears here.

Glossary — the buttons with odd names

Queue + schedule
Content tab, media panel. Hands the images you have selected to the automation service so it can plan social posts from them. There is no queue list and no cancel button in this panel — once queued, it is out of your hands here.
Library / Generate / Capture
The three ways to get an image in the Content tab. Library = pictures already in the media pipeline. Generate = make a new one with AI from a text prompt (needs the fal.ai key). Capture = text that was read out of photos you captured, so you can quote a sign, label or slide.
Insert into draft
Drops the media you selected straight into the article you are writing, in the order you clicked them. Note it lands at the top of the output area rather than inside the text, so it is not included when you copy or send the draft — add the images again in the Journal Editor if the article needs them.
Append FAQ
Adds a ready-made block of questions and answers, matched to your topic, to the end of the generated text. Good for search engines and AI answer boxes. It refuses if the text already contains a FAQ block.
Copy active tab
Copies whichever output tab you are currently looking at (Content, SEO Meta, AEO Schema, Social or Internal links) to your clipboard. It does this silently — there is no confirmation message, so just paste to check.
Send to backlog
Hands the draft to the automated blog agent, which picks up its backlog on its next run (Monday and Thursday, 09:00). If the agent cannot be reached, the draft is downloaded as a small file instead, with instructions on where to drop it.
Dry-run
Automation tab. A rehearsal: you fire a pretend event and the system reports which rules would have matched and what they would have done — without sending anything, changing any stage or creating any document. Safe to press as often as you like.
BWA
Betriebswirtschaftliche Auswertung — the German monthly management report your accountant works from: revenue, cost of goods, gross profit, overheads and the result for the period. It is calculated by the local cycleERP app on the Mac; the Finance tab only displays it.
OPOS
Offene Posten — open items: invoices that have been issued but not yet paid. That is exactly what the Finance tab's "Open items (AR)" card lists. Paid invoices are deliberately left out.
O2C
Order-to-Cash — the whole chain from first contact to money in the bank: lead → quote → order → invoice → payment. It is the heading over the CRM, Documents and Deal Simulator group in the sidebar, because those three tabs are the steps of that chain.

This handbook describes the panel as it is built today. If a button behaves differently from what you read here, trust the button and tell whoever maintains the theme — the guide lives in snippets/cw-admin-guide.liquid and is meant to be corrected, not worked around.

SPIRIT Platform Documentation

📊

Operator Dashboard

Real-time monitoring, revenue tracking, fleet management at spirit.cyclewash.com

🔧

Technician Portal

Remote diagnostics, maintenance scheduling, firmware updates, alert management

📱

Customer App

Find stations, start washes, payment, wash history, loyalty rewards

SPIRIT Dashboard — Getting Started

Create Your Account

Visit spirit.cyclewash.com → Click "Register" → Enter your company details and the machine serial number from the nameplate (format: CW-XXXX-XXXXXX).

Connect Your Machine

On your machine's LCD: Settings → WiFi → Enter credentials. The machine will appear in your dashboard within 5 minutes. Status LED turns solid blue when connected.

Configure Payment

Dashboard → Settings → Payments → Enable desired methods: Nayax (contactless cards), QR code (app), Coin acceptor. Set pricing per wash cycle (recommended: €2-5).

Set Up Alerts

Dashboard → Alerts → Configure: Low water, low detergent, maintenance due, offline alert, revenue milestone. Notifications via email, SMS, or push notification.

SPIRIT API Reference

Base URL: https://api.spirit.cyclewash.com/v1
Authentication: Bearer token (obtained via OAuth2 client credentials flow)

Endpoints

MethodEndpointDescription
GET/machinesList all machines in your fleet
GET/machines/{id}/statusReal-time machine status (water, battery, last wash)
GET/machines/{id}/analyticsUsage analytics (washes, revenue, water consumption)
POST/machines/{id}/commandSend command (start_wash, stop, diagnostic)
GET/revenueRevenue report by date range
GET/alertsActive maintenance and system alerts
WS/ws/machines/{id}WebSocket for real-time telemetry stream

Example: Get Machine Status

curl -X GET https://api.spirit.cyclewash.com/v1/machines/CW-2024-001234/status \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json"

# Response:
{
  "machine_id": "CW-2024-001234",
  "model": "Pro Platinum",
  "status": "idle",
  "battery_level": 87,
  "water_level": 64,
  "detergent_level": 45,
  "total_washes": 12847,
  "today_washes": 23,
  "today_revenue": 92.00,
  "last_wash": "2026-04-06T14:32:00Z",
  "firmware": "3.2.1",
  "connectivity": "wifi",
  "solar_output_watts": 285,
  "location": { "lat": 50.9503, "lng": 6.9588 }
}

MQTT Topics

# Subscribe to machine telemetry
cyclewash/{machine_id}/telemetry    → { battery, water, solar, temp }
cyclewash/{machine_id}/status       → { state: idle|washing|error }
cyclewash/{machine_id}/wash         → { started_at, duration, water_used }
cyclewash/{machine_id}/alert        → { type, severity, message }

# Publish commands
cyclewash/{machine_id}/command      → { action: "start_wash" | "stop" | "diagnostic" }
cyclewash/{machine_id}/config       → { price, wash_duration, eco_mode }

# MQTT Broker: mqtt.spirit.cyclewash.com:8883 (TLS)
# Protocol: MQTT v5.0 over WSS

cycleWASH iPhone App

Download: Available on the App Store — search "cycleWASH" or scan the QR code at any cycleWASH station.

App Setup — Step by Step

Download & Install

Open the App Store → Search "cycleWASH SPIRIT" → Tap "Get" → App installs automatically. Requires iOS 15.0 or later, iPhone 8 or newer.

Create Your Account

Open the app → Tap "Sign Up" → Enter email and create password (or sign in with Apple ID / Google). Verify your email with the 6-digit code sent to your inbox.

Add Payment Method

Profile → Payment Methods → Add: Apple Pay (recommended), credit/debit card, or PayPal. You can also purchase wash credits in bundles (10-pack, 20-pack) for discounts.

Enable Location Services

Allow location access to find nearby stations. The map shows all cycleWASH stations with real-time availability, wait times, and walking directions.

Your First Wash

Find a station on the map → Tap "Start Wash" → Scan the QR code on the machine (or tap NFC) → Place your bike → Wash starts automatically → Payment charged after completion.

App Features

FeatureDescriptionTier
🗺️ Station FinderMap with real-time availability, hours, pricingFree
📱 QR/NFC StartStart a wash by scanning the station QR codeFree
📊 Wash HistoryComplete log of all washes with date, station, costFree
💳 Digital WalletStore payment methods, buy credit bundlesFree
⭐ Loyalty ProgramEarn points per wash → unlock rewards and discountsFree
🔔 NotificationsWash complete alerts, nearby station alerts, promotionsFree
🏆 AchievementsEarn badges: First Wash, 10 Washes, Eco Warrior, etc.Free
📈 Eco ImpactTrack water saved, CO₂ reduced vs. manual washingFree
🔗 Fleet ModeManage multiple bikes, add team members, bulk creditsPro
📊 Fleet AnalyticsUsage reports, cost breakdown, maintenance alertsPro

Loyalty Tiers

TierRequirementBenefits
🥉 Bronze0 washesBase pricing, earn 1 point/wash
🥈 Silver10 washes5% discount, earn 1.5 points/wash, priority support
🥇 Gold50 washes10% discount, earn 2 points/wash, free care product sample
💎 Platinum200 washes20% discount, earn 3 points/wash, VIP access, free annual service

Troubleshooting

QR code not scanning

1. Ensure camera permissions are enabled (Settings → cycleWASH → Camera → Allow)
2. Clean the QR code on the machine if dirty
3. Try holding your phone 15-20cm from the code
4. If still not working, tap "Enter Code Manually" and type the 8-digit station code displayed below the QR

Payment failed

1. Check your payment method is valid (Profile → Payment Methods)
2. Ensure sufficient balance on your card or wash credit account
3. Try a different payment method (Apple Pay, card, PayPal)
4. If using credit bundles, check your remaining balance
5. Contact support: info@cyclewash.de

App crashes or freezes

1. Force close the app: swipe up from bottom, swipe the app away
2. Check for updates: App Store → Profile → cycleWASH → Update
3. Restart your iPhone
4. Delete and reinstall the app (your account data is cloud-synced)
5. Minimum requirement: iOS 15.0, iPhone 8 or newer

Shipping & Payments

Shipping Zones & Rates

ZoneCountriesMachine RateCare ProductsDelivery
🇩🇪 GermanyGermanyFREE (>€10k)FREE2-5 days
🇪🇺 EU NearbyAT, NL, BE, LU, FR, DK, CZ, PLfrom €149€195-8 days
🇪🇺 EU FarES, IT, PT, GR, RO, SE, FI, NOfrom €249€297-12 days
🇨🇭 SwitzerlandSwitzerlandfrom €199€355-8 days
🇬🇧 UKUnited Kingdomfrom €249€357-10 days
🇺🇸 US EastEastern US statesfrom $499$4910-15 days
🇺🇸 US WestWestern US statesfrom $599$4912-18 days
🇯🇵🇰🇷 AsiaJapan, South Koreafrom €599€5910-15 days
🇦🇪 Middle EastUAE, Saudi Arabiafrom €549€498-12 days
🌍 Rest of WorldAll other countriesCustom quote€6515-25 days
All machine shipments include professional wooden crating, full transit insurance, and real-time tracking. OASIS stations require dedicated freight and white-glove installation.

Payment Methods

MethodTypeRegionsStatus
Shopify PaymentsVisa, MC, AmexWorldwide✅ Active
Shop PayAccelerated checkoutWorldwide✅ Active
Apple PayMobile NFCWorldwide✅ Active
Google PayMobile NFCWorldwide✅ Active
PayPalDigital walletWorldwide✅ Active
SharpeiLeasing / RentalEU, US✅ Integrated
Bank TransferB2B InvoiceEUOn request
KlarnaBuy Now Pay LaterEU, USRecommended

B2B Purchase Process

Request a Quote

Contact us via the form at /pages/contact-us, email info@cyclewash.de, or use the chat widget. Specify model, quantity, and delivery location.

Receive Proposal

We'll send a detailed proposal within 24 hours including product pricing, shipping costs, installation plan, and payment terms (NET 30/60/90 available for qualified buyers).

Order & Payment

Place your order online (Shopify checkout) or via signed purchase order. Payment options: full upfront, 50/50 split, or leasing via Sharpei.

Delivery & Installation

Manufacturing: 2-4 weeks. Shipping per zone table above. For OASIS stations, our team handles on-site installation (2-3 days).

Frequently Asked Questions

Nico answers our most-asked questions in 10 seconds — the full FAQ is below.

How much water does a cycleWASH use per wash?

Just 3-5 liters per wash cycle — 95% less than manual bike washing (80+ liters). Our water recycling system reclaims up to 85% of used water.

Is it safe for e-bikes and carbon frames?

Yes! Our calibrated low-pressure spray system is specifically designed for e-bikes and carbon frames. Unlike pressure washers, our system never exceeds safe pressure levels for electronics and delicate materials.

How long does a wash cycle take?

Mini: 45 seconds. Pro: 60 seconds. OASIS: 90 seconds (includes pre-rinse and air dry). The machine handles everything automatically — just place your bike and press start.

Does it work without sunlight?

Yes. Solar models include a LiFePO4 battery bank that stores enough energy for 20-40 washes on a full charge. Battery models work independently of sunlight. The system automatically switches between solar, battery, and optional grid backup.

What is the ROI / payback period?

Typical ROI: 8-18 months depending on location and pricing. At €3/wash with 50 washes/day, a Mini generates ~€4,500/month revenue. Use our ROI Calculator for a custom estimate.

Do you offer leasing or financing?

Yes! Through our partner Sharpei, we offer flexible leasing from €199/month (Mini) or €299/month (Pro). Revenue-share models are also available — zero upfront investment, you pay per wash.

What detergent/cleaning solution is used?

Our proprietary 100% biodegradable cleaning solution (cycleWASH EcoClean). It's pH-neutral, safe for all bike surfaces including carbon, paint, and rubber. Available in 5L and 20L containers from our Care Products page.

Can I integrate cycleWASH with my existing bike-sharing fleet?

Absolutely. The SPIRIT API integrates with all major fleet management systems. We provide REST API + MQTT endpoints for real-time monitoring. See the SPIRIT documentation for API details.

What warranty do you offer?

Limited warranty per our Terms & Conditions. Wear parts (brushes, hoses, filters, pumps, roller-drive motors, drive belts) are not covered. Extended warranty (1–5 years, matching the contract period) is available when a maintenance contract is signed. For Premium or Enterprise support, contact info@cyclewash.de.

Where are cycleWASH machines manufactured?

All machines are designed and manufactured at our facility in Cologne, Germany (CW Cleaning Solutions GmbH, Belfortstraße 8, 50668 Cologne). We control the entire supply chain for consistent quality. 36 international patents protect our technology.

1. Pick order

Real Shopify orders + draft orders — type a name or number to filter.

Loading orders from Shopify…

VAT calculated on net (line items + shipping) and shown on its own line. §4 reference auto-switches based on shipping country.

2. Generate document

Click a card to open a preview, then save to Shopify or download.

Ready. Pick an order above, then click a document.

Saved documents 0

Every document you generate is stored here automatically. Click to preview, download as PDF, or save to Shopify.

No documents yet — pick an order and generate one above.

Document style

Adjust how every generated PDF looks — accent colour, logo, company & bank details. Saved to Shopify; applies to all new documents on every device.

Connect Shopify API Token

Paste a Custom App admin API token (scopes: read_orders, read_draft_orders). It starts with shpat_.

Document preview

📁 Saved documents

Generated PDFs are stored in this browser, grouped by type. Click any to preview, download, archive, or remove.
O2C · Pricing Strategy

Deal Simulator

Model discounts, free items & channel margins — see live impact on gross margin, P&L and cashflow. Decide how far you can discount before the deal stops paying.

Machines in this deal

25%Discount on list
Customer net (total)
Gross profit (total)
Gross margin %
Margin given away
Turn this into a quote Saves a cw_quote record and can open a Shopify draft order.

Deal P&L (all machines)

LineDeal total

Cashflow timeline (this deal)

Blue = cash in (deposit on order, balance on delivery ~6 weeks). Red = COGS cash out at production. Green = net cash by month.

📣 Deal content — ready to publish

Finance · BWA · P&L · open items

The books, computed locally.

Period results come out of the local cycleERP app — it owns the ledger, runs the BWA and holds every DATEV artefact — and are cached up to Shopify as cw_ledger_period metaobjects. This tab reads them, plus the cw_invoice open-item list. Nothing here recomputes accounting in the browser. Waiting for the Finance tab to open…

Revenue
Gross profit
Opex
Net result
Latest period — no data yet

Periods · BWA / P&L

Every cw_ledger_period record on the store, newest first. The BWA link opens the snapshot file the local app uploaded to Shopify Files.

Period Revenue COGS Gross profit Opex Net Computed BWA
Loading periods…

No periods have been synced yet

BWA and P&L figures are not calculated here. The local cycleERP app consolidates op.db, runs the period close and then pushes the result up as a cw_ledger_period metaobject — this tab is the read side of that pipe.

  1. Start the local app: ~/cycleERP (Docker), web UI on http://localhost:8765.
  2. Close a period there (BWA / P&L run).
  3. Let the sync module push the period up — it writes cw_ledger_period and uploads the BWA snapshot to Shopify Files.
  4. Come back and hit Reload. The KPI row and the table fill in.

Why the detour: Shopify is the system of record for what everyone may read; the Mac keeps the raw ledger, the tax data and the DATEV artefacts. Only the computed summary travels.

Open items (AR)

Every cw_invoice that is not marked paid. Overdue days are counted against due_date in red.

Invoice Customer Amount Due Overdue Status PDF
Loading open items…
Total open

No open invoices on the store

Either every invoice is settled, or the invoicing module has not synced yet. Invoice records (cw_invoice) are created by the local cycleERP app when it issues a document, and the PDF is uploaded to Shopify Files alongside it.

  1. Run the local app (~/cycleERP, http://localhost:8765).
  2. Issue or import invoices there — OPOS lives in cw-ar-ap.json.
  3. Let the sync module push them up as cw_invoice, then reload this tab.

Paid invoices are intentionally hidden here — this card is the open-item (OPOS) view, not the invoice archive.

DATEV export

Local-only. Always.

DATEV and tax data never leave the Mac. The export is generated by the local cycleERP app from op.db and written to disk there. This browser tab does not — and will not — compute, buffer or upload DATEV data. Only the computed period summaries you see above are ever synced to Shopify.

Checking whether the local app answers on localhost:8765

Source: Shopify metaobjects cw_ledger_period + cw_invoice, read through the cyclewash-admin-proxy worker. Write side and all heavy compute live in the local cycleERP app — see docs/ARCHITECTURE-CYCLEERP-ADMIN.md.

ImagePipecapture → produce
Source
imagepipe.sh ingest photos 10
🗂

Gallery Manager

Reorder, recaption, add or delete the 443 public gallery items. Opens in a focused window — Shopify blocks embedding pages inside pages.

Studio · Social proof

Customer Testimonials

Real quotes from real customers, shown at the bottom of the product pages. Only add people who have agreed to be quoted — never invent an example entry.

Entries 0 Metafield editor ↗

Company, person and quote are required. The website must start with https://. For the logo, upload the file in Shopify admin under Content → Files, copy the CDN link and paste it here (a theme-asset filename such as logo-acme.webp also works). Or press Upload logo to Shopify on the entry to send the file straight to the CDN. Nothing goes live until you press Save.

No testimonials yet. Add one once a customer has approved their quote.

Automation — cycleERP Rules Engine

Event → Rule → Action. Rules live in config (the automation_rule metaobject) — edit without a deploy.

How automation works
  1. Event — something happens (a lead replies, a quote is accepted, an image is generated).
  2. Rule — a rule listening on that event checks its conditions; if they all match, it fires.
  3. Action — the rule sets a stage, drafts an email, notifies sales, schedules a follow-up, creates a doc.
  4. Guarded transitions — an entity only ever moves along the arrows in the state machines below. Nothing can jump a stage.
  5. No deploy needed — rules are config, not code. Build one here, then test it with Dry-run: it reports which rules match and what they would do, without any side-effects.

State machines — entities advance only along guarded transitions (PLC interlock)

Active rules

loading…

Recent activity — rules that actually fired on the worker

checking the worker…

Dry-runs from this browser — local test log, no side-effects

No dry-runs yet in this browser.

Test — dry-run console: fire an event, see which rules match (no side-effects)


  
Admin · Integrations

Keys & Integrations

Every API key the admin panels use, in one place. Paste a key, hit Save, and the panel that needs it picks it up immediately.

Keys stay in this browser. They are saved in this browser’s localStorage only — never sent to Shopify, never stored in the theme, never written to a metaobject. A key is only passed on to the worker that needs it, at the moment you use that feature. Clearing your browser data, or opening the admin on another device, means entering them again.

Loading integrations…

Paid services bill you directly — cycleWASH never sees the usage or the key. The free lanes (OpenStreetMap / Overpass, Gemini’s free tier) cost nothing to run.

Proven Performance
1,000,000
Bike washes
(brush lifespan)
Designed for up to
10,000
Operating hours
(continuous duty)
Solar & Battery Powered
No Grid Connection Required
Made in Germany
Engineered in Cologne
IP
International Patents
36 Patents Worldwide
ECO
100% Biodegradable
Closed Water Circuit
DEKRA geprüft
DEKRA geprüft
CE
CE Conform