Commit Graph

485 Commits

Author SHA1 Message Date
Jason Staack
786d494670 fix(docs): fix gradient fill direction so it ends on gradient, not white
Gradient on left half of background, white on right. Animation sweeps
from white to gradient. Uses 'both' fill mode for correct state during
delay and after completion.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-09 23:10:50 -05:00
Jason Staack
dc6182bbd0 feat(docs): animate gradient fill across hero title on page load
The gradient sweeps left-to-right across "Centralized Management"
after a 0.3s delay, transitioning from plain text to the teal-burgundy
gradient over 1.2s.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-09 23:09:23 -05:00
Jason Staack
e2813116da fix(docs): stagger bullet throb so only one pulses at a time per list
Each list gets a dynamically generated keyframe where only 1/N of the
cycle is active. Bullets are staggered 0.8s apart so they take turns
pulsing in sequence, looping forever.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-09 23:08:11 -05:00
Jason Staack
a3630c03e6 fix(docs): make bullet throb loop continuously via CSS only
Replace scroll-triggered JS animation with infinite CSS keyframe loop
(2.4s cycle). Remove IntersectionObserver code.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-09 23:06:34 -05:00
Jason Staack
7126621e83 fix(docs): make bullet throb repeat on every scroll into view
Remove unobserve so bullets reset when scrolled out and throb again
on re-entry.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-09 23:05:22 -05:00
Jason Staack
040f0335c1 feat(docs): add bullet throb animation on scroll
Teal bullet dots pulse with a staggered throb when list items scroll
into view. Uses IntersectionObserver with 120ms stagger per item.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-09 23:04:11 -05:00
Jason Staack
ff09382e3a fix(docs): center content sections to match hero layout
Section labels, titles, descriptions, and closing statements are now
centered. Bullet lists remain left-aligned within their centered
container for readability. Fixes visual disconnect between centered
hero and left-justified content sections.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-09 23:00:34 -05:00
Jason Staack
0aa09260db docs: rewrite landing page with operator-focused copy
Replace marketing-heavy hero, feature cards, and architecture diagram
with straightforward copy aimed at real MikroTik operators. New sections:
What It Does, Safe Configuration, Built for Real Operators, Designed for
Scale, and Open Source CTA.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-09 22:58:21 -05:00
Jason Staack
5fbff03dea docs: simplify architecture diagram, remove tech stack badges
Replace verbose ASCII architecture in README with clean linear flow.
Remove tech stack badge grid from landing page.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-09 22:54:49 -05:00
Jason Staack
28870a61a3 docs: add early access / testing disclaimer
Banner on landing page, docs page, and GitHub README warning that the
software is in active development and not yet ready for production use.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-09 22:49:24 -05:00
Jason Staack
a3d2172797 fix(backend): change APP_BASE_URL default from port 5173 to 3000
Password reset email links pointed to Vite dev port instead of the
Docker frontend port.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-09 22:39:04 -05:00
Jason Staack
837ab6f8fa fix(backend): parse CLI command string into RouterOS API command + args
execute_cli was passing the full CLI string (e.g. '/ping address=8.8.8.8
count=4') as a single command to the Go poller. go-routeros expects the
command path and args separately. Now splits into command + prefixed args.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-09 22:05:05 -05:00
Jason Staack
394be01145 fix(frontend): default ping/traceroute target to 8.8.8.8
The target input showed "8.8.8.8" as placeholder text but the actual
value was empty. Clicking Ping/Traceroute silently returned because
the empty target guard fired. Users saw the placeholder and assumed
the tool was broken.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-09 21:57:10 -05:00
Jason Staack
a3cc35c4b7 fix(frontend): generate Emergency Kit PDF client-side with actual Secret Key
The server-generated PDF had a placeholder for the Secret Key that was
never filled in client-side, making the Emergency Kit useless. Users
who relied on it could not recover their Secret Key on new devices.

Now generates the PDF entirely client-side via browser print dialog,
with the real Secret Key embedded. No server round-trip, key never
leaves the browser.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-09 21:47:50 -05:00
Jason Staack
6c7dfe02f5 fix(frontend): show Secret Key field when IndexedDB key is stale
When a user logs in from a browser with an outdated Secret Key in
IndexedDB (e.g. after server rebuild/re-enrollment), the SRP handshake
fails with 401 but the Secret Key input field was never shown — leaving
the user stuck with no way to enter their current key.

Now detects stale-key 401s and prompts for manual Secret Key entry.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-09 21:30:09 -05:00
Jason Staack
32965857e7 fix: wire up empty-state Add Device button to open dialog
The FleetTable empty state navigated with ?add=true but the devices page
never read that param. Now it opens the AddDeviceForm when add=true is
in the search params.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-09 21:12:01 -05:00
Jason Staack
2605a97331 fix: use user.user_id instead of user.id in SMTP settings save
CurrentUser object uses user_id attribute, not id. Caused AttributeError
on PUT /api/settings/smtp.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-09 21:08:21 -05:00
Jason Staack
f7a53e60da fix: SMTP TLS logic was inverted — plain SMTP incorrectly used STARTTLS
When use_tls=false, the old logic set start_tls=true for any port != 25,
which broke plain SMTP servers like Mailpit. Now:
- Port 465: implicit TLS
- use_tls=true on other ports: STARTTLS
- use_tls=false: plain SMTP (no TLS)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-09 21:03:54 -05:00
Jason Staack
2461582cb3 fix: use relative paths for bind-mount volumes
Absolute paths (/Volumes/ssd01/mikrotik/docker-data/) are machine-specific
and won't work on any other system. Use ./docker-data/ so the repo works
wherever it's cloned.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-09 20:51:33 -05:00
Jason Staack
9510e56ced fix: use working dev defaults in .env.example
- POSTGRES_PASSWORD and DB URLs now match what docker-compose.override.yml
  and init-postgres.sql actually use (postgres/postgres, app_password)
- CREDENTIAL_ENCRYPTION_KEY is now valid base64 (32 bytes) so the API
  actually starts instead of crashing on the Pydantic validator
- JWT_SECRET_KEY is a dev-only value (insecure defaults check skips dev)
- Added quick-start comment block with login credentials

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-09 20:46:33 -05:00
Jason Staack
8949a36454 fix: bump Node to 20 in frontend Dockerfile for Vite 7 compatibility
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-09 20:39:51 -05:00
Jason Staack
d30df957e2 fix: rename network from 'mikrotik' to 'tod' to match overlay compose files
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-09 20:35:49 -05:00
staack
4cb887b8fa ci: add feature request issue template 2026-03-09 17:50:45 -05:00
staack
343d376b65 ci: add bug report issue template 2026-03-09 17:50:36 -05:00
staack
6473401fe3 ci: add issue template config 2026-03-09 17:50:25 -05:00
Jason Staack
a57e1f6cfe docs: add Code of Conduct
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-09 12:59:05 -05:00
Jason Staack
e2a28cf161 docs: add licensing and support contact info
- Update README license section with 1,000 device free tier
- Add license@theotherdude.net and support@theotherdude.net
- Add Licensing and Support links to both page footers

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 20:28:46 -05:00
Jason Staack
ed21661994 docs(license): update Additional Use Grant — free production use up to 1,000 devices
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 20:24:23 -05:00
Jason Staack
d020336c9a feat(seo): add Organization schema linking site to GitHub repo
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 20:22:05 -05:00
Jason Staack
7227760d1a feat(analytics): add Cloudflare Web Analytics snippet
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 20:18:36 -05:00
Jason Staack
4c8ab8df4e feat(seo): add Google Search Console verification
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 19:59:28 -05:00
Jason Staack
7994fc1f1e docs: update storage recommendation wording
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 19:54:55 -05:00
Jason Staack
5984188ca3 feat(website): add GitHub nav link and git clone to quick start
- Add GitHub link to nav bar on both index and docs pages
- Add git clone + cd commands to Quick Start terminal block

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 19:53:12 -05:00
Jason Staack
9030a1b3e9 fix(seo): add OG image, docs footer, GitHub link, and sitemap dates
- Add 1200x630 og-image.png with rug rosette branding
- Add og:image and twitter:image to docs.html
- Upgrade docs.html twitter:card from summary to summary_large_image
- Add og:locale to docs.html
- Add footer with nav links to docs.html
- Add GitHub repo link to both page footers
- Update sitemap.xml lastmod to 2026-03-09

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 19:39:39 -05:00
Jason Staack
b840047e19 feat: The Other Dude v9.0.1 — full-featured email system
ci: add GitHub Pages deployment workflow for docs site

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 19:30:44 -05:00