CleanFrame
A personal home screen for Samsung The Frame. A starting point to fork and adapt.
PlaneWX is the decision support system for general aviation. It gives pilots professional-grade tools and instills professional-grade habits that make flying safer. The risk-management loop for pilots
LifestyleTypeScript · HTMLGitHub @markwolfgangOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
PlaneWX Landing Page
Translation pending
Taken from the repository README
Loading the full README. The saved excerpt is shown below.
A standalone Next.js landing page for PlaneWX with waitlist signup functionality.
The password-gated Brand Portal at /brand is the Sara-facing marketing source of truth for tone, story, terminology, and product framing. Prose lives in content/brand/ and deploys from main.
App-repo docs (for example PLANEWX-MASTER-REFERENCE.md in the product app) may still exist for engineering/product context. They are not the Sara-facing marketing SoT. Edit content/brand/ here when messaging changes. See content/brand/README.md.Read the full README ↗A standalone Next.js landing page for PlaneWX with waitlist signup functionality.
The password-gated Brand Portal at /brand is the Sara-facing marketing source of truth for tone, story, terminology, and product framing. Prose lives in content/brand/ and deploys from main.
App-repo docs (for example PLANEWX-MASTER-REFERENCE.md in the product app) may still exist for engineering/product context. They are not the Sara-facing marketing SoT. Edit content/brand/ here when messaging changes. See content/brand/README.md.
Install dependencies:
npm install
Set up environment variables:
cp .env.example .env.local
Then add your Supabase credentials:
NEXT_PUBLIC_SUPABASE_URL - Your Supabase project URLNEXT_PUBLIC_SUPABASE_ANON_KEY - Your Supabase anonymous keyRun the database migration:
Apply the waitlist table migration from the main PlaneWX app:
supabase/migrations/create_waitlist_table.sqlRun the development server:
npm run dev
Open http://localhost:3000 in your browser.
The landing page will be available at your configured domain (e.g., www.planewx.ai).
Blog posts are fetched from Soro (lib/soro.ts) with ISR (revalidate = 3600).
After publishing a new Soro article, purge caches so the slug page cannot keep a sticky 404:
# Set REVALIDATE_SECRET in Vercel (falls back to WAITLIST_ADMIN_SECRET if unset)
curl -X POST -H "Authorization: Bearer $REVALIDATE_SECRET" \
-H "Content-Type: application/json" \
-d '{"slug":"your-new-slug"}' \
https://www.planewx.ai/api/revalidate
Slug pages also refetch the Soro list with cache: "no-store" when a slug is missing from the hour-long list cache, and confirmed misses are not ISR-cached for an hour.
This app uses the same Supabase database as the main PlaneWX app. The waitlist table stores:
planewx-landing/
├── app/
│ ├── api/
│ │ └── waitlist/
│ │ └── join/ # Waitlist signup API
│ ├── globals.css # Global styles
│ ├── layout.tsx # Root layout
│ └── page.tsx # Landing page
├── components/
│ ├── landing-page.tsx # Main landing page component
│ └── ui/ # Reusable UI components
└── lib/
└── utils.ts # Utility functions