Commit Graph
35 Commits
Author SHA1 Message Date
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 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 94b5e36d8e hero: switch to new 1920x768 images in images/hero/ 2026-08-20 09:42:16 +00: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
reef 26d113b486 Server status banner: live ping times, best-server highlight, optimal location badge
- Replaced city placards with a full server status banner
- Grid of 6 server cards (Amsterdam, Boston, Manchester, Mumbai, São Paulo, Sydney)
- JS pings each server via Image() timing, shows ms latency
- Best server highlighted with brass glow, shadow, and 'Best' badge
- 'Your optimal server location: <city> (<ms> ms)' with bounce animation
- Staggered card entrance animation on page load
- Responsive: 6-col -> 3-col -> 2-col grid
2026-08-19 21:35:05 +00:00
reef 85334fc4d2 Homepage relaunch: contrast fix, heading hierarchy, order widget refactor, final CTA band, depth & polish 2026-08-15 09:35:00 +00:00
reef e1180c9268 Dynamic pricing note: monthly shows 'Perfect for trial, termination any time', yearly shows 'Save money, less administration' 2026-06-25 08:24:46 +00:00
reef 56cbe820a5 Remove free trial popup modal and related JS (scroll trigger, panel, functions) 2026-06-24 21:02:36 +00:00
oliver 3a623278fd h 2026-06-24 10:28:30 -03:00