Synaplan
Open-source AI platform for companies: self-hosted AI agents, GDPR-compliant chatbot widget, RAG knowledge base, WhatsApp and Outlook AI, MCP, multi-model routing. Docker, Kubernetes or hosted in Germ
Schedule, dispatch, invoice and get paid in one app. Field service management software for HVAC, fire, electrical and plumbing contractors. Book a free demo.
BusinessGitHub @credmarketing-cmykOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
Repository information has not been collected yet.
No updates detected yet. GitHub releases will appear here.
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗zentrades.pro migrated from WordPress (Elementor + AIOSEO) to Next.js.
Every published page, post, category and tag archive is served at the same URL as on WordPress, with the same HTML, styling and SEO tags (title, meta description, canonical, Open Graph, Twitter cards, robots, JSON-LD schema).
npm install
npm run dev # http://localhost:3000
npm run build && npm start
Copy .env.example to .env.local and set:
| Variable | Purpose |
|---|---|
NEXT_PUBLIC_SITE_URL | Production origin used in canonical URLs, Open Graph, JSON-LD and the sitemap. Defaults to https://zentrades.pro. |
FORMS_WEBHOOK_URL | Optional. Where checklist/form submissions are sent (JSON POST). See "Checklists, forms and post grids". |
WP_BACKEND_URL | Optional. A WordPress install that still processes form submissions and AJAX. /wp-admin/admin-ajax.php and /wp-json/* are proxied to it. |
| Path | What it is |
|---|---|
data/manifest.json | Every migrated URL → its data file, type, title, last-modified, noindex flag. |
data/pages/*.json.gz | One gzipped file per URL: <head> tags (SEO metadata, styles, scripts), <html>/<body> attributes and the rendered body HTML. |
data/404.json | The WordPress 404 template, used by app/not-found.tsx. |
data/redirects.json | Redirection-plugin rules (301s). |
data/crawl-redirects.json | Redirects WordPress issued during the crawl. |
app/[...slug]/route.ts | Catch-all route: pre-renders every URL in the manifest at build time. |
app/sitemap.ts, app/robots.ts | /sitemap.xml (indexable URLs only) and /robots.txt. |
next.config.ts | Redirects, and proxy rewrites to WP_BACKEND_URL. |
public/wp-content, public/wp-includes | CSS, JS, fonts and images the pages use, at their original paths. |
Seven pages run as React components converted from the Claude Design export
("ZenTrades Homepage Redesign"): /, /zenhvac, /zenplumbing,
/zenelectrical, /elevator, /trades/water-restoration-software, and /zenfire
(from the second export, "ZenTrades Homepage Redesign 2").
components/redesign/*.jsx: one component per page (layout, content, and the
page's interactive state). Edit them directly.components/RedesignPage.tsx: wraps a design with the site nav and footer for
its vertical, its AIOSEO tags (title, description, canonical, Open Graph,
schema) and the design's FAQ schema.lib/links.js: maps button and footer labels ("Book a demo", "HVAC", "See all
features"…) to real URLs, taken from each page's own menus, so every vertical
links to its own demo, contact and feature pages. Homepage customer stories,
feature list and integration tiles link to their case-study, feature and
integration pages.--zt-gutter, set
in RedesignPage.tsx and lib/chrome.ts).public/redesign/.components/DemoModal.tsx: "Product tour" / "Watch demo" buttons open the
page's Supademo tour (read from the WordPress popup) in a modal.Every page (React and migrated) uses the redesigned navigation and footer,
built in lib/chrome.ts as plain HTML with /zt-chrome.js for dropdowns and
the mobile menu.
lib/nav.ts reads the menu, logo, Book a Demo and promos from
that page's WordPress header. Pages without a header (tag/category archives)
get their vertical's chrome; the four /wdec campaign landing pages are left
unchanged.resolveLink (lib/nav.ts) fixes dead menu links: the WordPress menus point at
feature URLs that were never published, so each feature goes to its own
vertical's page (/zenhvac/features/crew-management), then the general
feature page, then Book a Demo.lib/links.js.
The big footer logo follows the vertical.All ~400 blog articles (the /blog/ sections of every vertical, guides,
private-equity posts and standalone articles) use the "Blog Article" layout
from the second redesign export, rendered by lib/blog.ts from each post's own
WordPress content:
/zt-blog.js), numbered sections, key-takeaways box, template-download
cards, FAQ, "Keep reading" (related posts from the same blog) and a demo CTA;isArticle in lib/blog.ts).WordPress plugin shortcodes in the crawled pages are replaced with native
versions (lib/shortcodes.ts), because the Forminator and YMC Filter plugins
weren't part of the WordPress backup:
[forminator_form] checklists (649 inspection checklists on ~654 pages):
rendered from data/forms.json.gz by lib/forms.ts as server-side HTML, so
every question is indexable page text. /zt-forms.js adds Yes / No / N/A
answers, a progress bar, saving progress in the browser, Clear, and
Print / Save as PDF (prints a clean report of just the checklist).app/api/forms/route.ts.[forminator_quiz]: the conference quiz on /zenfire/blog/fire-conferences-in-2025.[ymc_filter]: the Private Equity post grid (lib/post-grid.ts, data/post-grids.json).Submissions are off until configured. Set FORMS_WEBHOOK_URL (a Zapier /
Make / HubSpot / CRM webhook) and /api/forms forwards each submission there as
JSON (formId, kind, page, data, submittedAt); checklists then also
show a Submit button. Without it, short forms show an email fallback and
checklists offer Print / Save as PDF only.
lib/lean.ts).
SEO tags, JSON-LD, HubSpot and tracking stay. Other migrated pages
(checklists, comparisons, case studies) still use Elementor's CSS.public/redesign/ are WebP, at most 1600px wide. Convert new
ones the same way before adding them.app/global-not-found.tsx holds the WordPress 404 design.
app/not-found.tsx is kept tiny on purpose: Next.js embeds it in every React
page.lib/wp.ts), and /wp-content, /wp-includes and /redesign files are
sent with long cache headers (next.config.ts).Add app/<path>/page.tsx (for example app/zentrades-pricing/page.tsx).
A specific route always takes priority over the catch-all, so pages can be
moved to real React components one at a time. Delete the page from
data/manifest.json once its replacement is live.
WP_BACKEND_URL (or replacing
the forms with a Next.js API route / a hosted form service).data/pages/*.json.gz or by rebuilding
pages in React./category/x/page/2). Only the first page of each
category and tag archive is included.