Commit Graph
111 Commits
Author SHA1 Message Date
reef d26a3ee725 Add console debug output to pingServer: OK/ERR/TIMEOUT with elapsed ms 2026-08-24 21:33:31 +00:00
reef 1642497c10 Prefix all SERVERS hosts with api. and remove duplicate api. from pingServer 2026-08-24 21:02:09 +00:00
reef f7460c129d Download static assets from static.odoo4projects.com (agent.js, agent.css, 4.svg, logo.svg, favicon.png) and serve locally. Update all HTML references. 2026-08-24 20:53:34 +00:00
reef 602329db27 Ping api.{host}/favicon.ico instead of {host}/favicon.ico 2026-08-24 19:36:46 +00:00
reef a003054781 Redesign footer: 4-column grid, partners section (OC Guy, OCA Paraguay, OD8N), brass top rule, partner cards 2026-08-22 12:45:41 +00:00
reef 5ddb142c8f Update upsell.html buy buttons: form POST to /shop/post_basket with info=uuid 2026-08-22 12:41:39 +00:00
oliver 7245e47cac static sites for ODOO 2026-08-22 09:37:27 -03:00
reef b34e001c46 Fix buyNow CSRF: use dynamic origin. Remove pricing foot from Empire card. 2026-08-22 12:33:16 +00:00
reef 109bcac7f7 Fix mobile pricing: stack 4 cards vertically (1 column) below 768px 2026-08-22 12:08:23 +00:00
reef 0ac11bcce0 Change pricing foot text to 'No setup fee. Stripe Payment / Cancel at any time' 2026-08-22 11:39:41 +00:00
reef 5a6380871d Lowercase info field 2026-08-22 09:16:58 +00:00
reef fcc972557b Rename location field to INFO, strip .odoo4projects.com from server value 2026-08-22 09:13:26 +00:00
reef 07de1249cf Log basket JSON to console on buyNow click 2026-08-22 09:06:55 +00:00
reef 8e5d508b13 Add server location select in pricing section, pre-select best server after ping, pass location in basket JSON payload 2026-08-22 08:45:12 +00:00
reef ba55327400 Fix buyNow: form POST to /shop/post_basket with JSON basket field, opens checkout in new tab — no CORS, no CSRF 2026-08-21 22:05:45 +00:00
reef d37ceca9bd Fix buyNow: direct product page links instead of CSRF-blocked POST 2026-08-21 22:01:44 +00:00
reef d58089d194 Fix 4 console errors: guard old slider code, guard spinner null, guard GSAP empty-grid targets, replace CORS fetch with form-based buyNow 2026-08-21 21:59:12 +00:00
reef 284f59f863 Add direct Odoo shop buy buttons: POST basket + open cart in new window 2026-08-21 21:50:00 +00:00
reef 09f8b6100f Replace 'Instant setup, satisfied or reimbursed' with 'No setup fee. Cancel subscription at anytime' 2026-08-21 19:38:17 +00:00
reef ba0aa96d3b Update coupon code text: startups and NGOs 2026-08-21 19:17:50 +00:00
reef 3b4b1faef7 Add coupon code mention to affiliate FAQ answer 2026-08-21 17:53:48 +00:00
reef 47c187f661 Replace credit card FAQ with affiliate program Q&A 2026-08-21 17:52:45 +00:00
reef 5e7549651b Replace free trial FAQ with ODOO Community Q&A 2026-08-21 17:52:08 +00:00
reef 03e49b2b2c Remove 'Guest Services' kicker 2026-08-21 17:51:00 +00:00
reef 413471aceb Remove 'The Concierge Standard' kicker 2026-08-21 17:49:52 +00:00
reef 0020477cb1 Swap 6 Global Locations card to Management Within Odoo 2026-08-21 17:48:45 +00:00
reef 4afa74bd16 fix: restore gsap.set pre-hide + simpler observer (threshold 0.1, no rootMargin) — ensures no flash and animations fire correctly on scroll 2026-08-20 22:20:56 +00:00
reef 840982dc2e fix: silent fetch POST instead of new-window form, update subtitle
- Replace hidden form POST (target='_blank') with silent fetch() that
  ignores the response — no new window opens
- Send boolean values directly instead of serializing to 'true'/'false' strings
- Update subtitle: 'Download your PDF in minutes.' -> 'We will send the report in minutes.'
2026-08-20 21:16:12 +00:00
reef d4e9acd4e3 feat: add email field to business wizard, update success message
- Add email input field after textareas, before checkboxes
- Email required via both HTML 'required' attribute and JS validation
- POST email field to webhook as 'email' key
- Add .biz-field input[type='email'] CSS (inline + external) matching textarea style
- Update success message: 'We will email you the report once it is ready. AI generation typically takes 1-2 minutes.'
- Remove reference to new window / auto-download (no longer opens window)
2026-08-20 21:11:39 +00:00
reef 60b41d7453 fix: update business wizard webhook URL to n8n.odoo4projects.com 2026-08-20 15:30:29 +00:00
reef b2d2677a34 feat: open webhook response (HTML/PDF) in new window, update success text
- Replace fetch() with hidden form POST + target='_blank' so the webhook's
  auto-download HTML page opens in a new tab/window
- Send form-encoded fields (not JSON) since webhook expects POST form data
- Update success message: 'A new window has opened with your personalized
  Odoo project plan. The download will start automatically after research
  is complete.'
- Remove dead bizDownloadBtn references (button no longer needed)
2026-08-20 15:28:25 +00:00
reef 87874d0f34 feat: add checkboxes and update webhook for business wizard
- Add 3 checkboxes between textareas and submit button:
  - I already have a homepage (bizHasHomepage)
  - I already use ODOO (bizUsesOdoo)
  - I already have a developer for modules (bizHasDeveloper)
- POST to /webhook/report instead of old webhook UUID
- Include checkbox boolean values in request body
- Add .biz-checkbox-group and .biz-checkbox CSS (inline + external)
2026-08-20 15:22:38 +00:00
reef a24570f187 feat: add Bring Your Business wizard, replace final CTA
- Replace .final-cta section with .biz-wizard section
- Three textarea fields: Business Description, My Goals, Current Challenges
- On submit, POSTs to webhook endpoint that triggers AI Agent to
  generate a personalized Odoo project plan PDF
- On success, shows download button if webhook returns download_url
- Inline + external CSS: midnight background, brass-accented form fields
- Scroll animation observer updated to target .biz-wizard .container
- Remove all .final-cta CSS from style.css and inline critical styles
2026-08-20 11:41:51 +00:00
reef a2cfa09558 pricing: remove monthly/yearly billing toggle, default to yearly
- Remove billing-toggle-wrap HTML (switch + labels)
- Update all 4 pricing cards to show yearly prices by default
  with / year period and save percentage
- Simplify openOrderWidget() to always use yearly pricing only
- Remove billing toggle JS block (updatePrices, setBilling, event listeners)
- Remove billing toggle CSS (billing-toggle-wrap, .toggle-*, .toggle-switch)
- Update order widget default display to / year
- Update CTA note to 'Save money, less administration'
2026-08-20 10:38:03 +00:00
reef 3e9a6d5c4b feat: scroll-triggered section animations via IntersectionObserver + GSAP
Adds a staggered fade-in/rise animation (y:30→0, opacity:0→1, stagger 0.08s,
power2.out, 0.7s) for 5 section grids when they scroll into view:

- .features-grid (The Concierge Standard — includes Free Trial card)
- .faq-grid
- .pricing-grid
- .blog-grid
- .final-cta .container

Uses native IntersectionObserver (threshold 0.12, no extra CDN load). Children
are pre-set to hidden state at page load to prevent flash, then animated once
per section via GSAP. Animate-once guard per section via dataset flag.
2026-08-20 10:32:19 +00:00
reef 9a9319e3a3 perf: inline critical CSS, defer GSAP, preconnect cdnjs, font-display swap
- Inline all above-the-fold CSS (hero, server-banner, buttons, layout) as
  inline <style> in <head> to eliminate render-blocking style.css
- Load full style.css via media='print' onload pattern (async, non-blocking)
- Move GSAP from <head> to before </body> (right before script.js)
- Preconnect to cdnjs.cloudflare.com
- Override Font Awesome 6 font-display to 'swap' to prevent FOIT
2026-08-20 09:55:10 +00:00
reef 94b5e36d8e hero: switch to new 1920x768 images in images/hero/ 2026-08-20 09:42:16 +00:00
oliver ad03edb0ee new images in images/hero/ 2026-08-20 06:37:51 -03:00
reef 9a87d3a5fe Free Trial form in features grid: 2x3 layout, email + location + send
- features-grid changed to repeat(3, 1fr) for 2x3 layout
- 6th cell is a Free Trial card with midnight bg, brass border
- Email input, location dropdown (preselected to best ping server),
  brass Send button
- POST to webhook as JSON {email, location}
- On success: form hides, success message shown
- Responsive: 3col -> 2col -> 1col
2026-08-19 22:58:14 +00:00
reef b5c9361fc9 Click server card to slide its city into hero bg (no label change) 2026-08-19 22:55:18 +00:00
reef 1c362f4683 Golden frame on best server card — brass border, glow, lifted 2026-08-19 22:42:15 +00:00
reef a0ed2c7e9f Silent ping for hero carousel: pings in background, animates best city
- Pings all 6 servers silently with 2s timeout
- Picks the lowest-latency server
- GSAP slides the city image in from right with label
- Server banner cards stay static (city + country only, no ping UI)
2026-08-19 22:35:51 +00:00
reef b96c2870ef Simplify server banner: static city cards, no JS, no ping, no status
- Header changed to 'Our Server Locations'
- Cards hardcoded in HTML with just city name + region
- Removed all ping JS (IIFE, pingServer, markBest, etc.)
- Removed server-ping-wrap, best-badge, server-best, ping-spinner,
  status-dot, server-optimal CSS
- Removed empty server-optimal div
- Removed card entrance animation (static display)
2026-08-19 22:33:01 +00:00
reef a9328bf383 Remove initial background image — hero starts clean with gradient only, city slides in on first swap 2026-08-19 22:25:55 +00:00
reef 5e315cee0e GSAP for all animations, 3x slower, brighter city images
- Added GSAP 3.12.5 from CDN
- Card stagger entrance now uses gsap.fromTo with 0.6s duration, 0.09 stagger
- Carousel slide uses gsap.timeline: old slides out right (3s), new slides
  in from right (3s), label slides in (2.5s after 0.3s offset)
- All animations use power2.out easing
- Image brightness: opacity 0.12→0.25, filter brightness(1.15) saturate(1.1)
- ::after overlay changed from solid midnight @ 0.6 to gradient
  (midnight→transparent @ 0.5) — brighter image with smooth falloff
2026-08-19 22:23:28 +00:00
reef e2e37e18b4 Carousel hero bg: old image slides out right, new slides in from right
- ::after is now a dark overlay only (no bg image)
- .hero-bg container created on first swap
- Old slide (Amsterdam default) starts at translateX(0), animates to
  translateX(100%) — slides out to the right
- New slide (winning city) starts at translateX(100%), animates to
  translateX(0) — slides in from the right
- Both fire simultaneously via requestAnimationFrame, same easing
- Old slide removed after 1.2s cleanup timeout
- Label 'Our <City> server fits your location' slides in from right
  alongside the carousel animation
2026-08-19 22:18:25 +00:00
reef d29dd1174f Hero: preload city image, left-to-right clip-path reveal, label slide-in
- Preloads the best server's city image via new Image() before showing
- Reveal overlay uses clip-path: inset(0 100% ...) → inset(0) for smooth
  left-to-right slide over the default Amsterdam background
- Label 'Our <City> server fits your location' slides in from right
  simultaneously with backdrop-blur and brass border
- Both animations start and end together via requestAnimationFrame
2026-08-19 22:10:01 +00:00
reef fb8c1b7dea Hero bg swaps to best server's city image on ping complete
- Maps each server to a city image (holland, brazil, india, england,
  boston/sydney from Wikimedia Commons CC-BY-SA)
- CSS var --hero-bg controls ::after background, falls back to Amsterdam
- 0.8s ease-out transition when the image swaps
- Uses local webp for Odoo-sourced images, JPG for Wikimedia imports
2026-08-19 21:58:26 +00:00
reef 0d4e39f582 Hide connection status, 2s ping timeout 2026-08-19 21:43:59 +00:00
reef 2c6f033d43 Tidy server banner: hide ms, remove location line, rename to 'Your optimal server' 2026-08-19 21:41:49 +00:00