A static, Cloudflare-ready portal for sharing approved websites with friends.
This project intentionally avoids proxying or bypassing Microsoft Family, school, workplace, or network controls. It is designed for safe sharing: friends log in, then use a curated list of links you have reviewed.
- A responsive static website in
index.html,styles.css, andscript.js. - Cloudflare Pages Functions for OAuth login.
- A paste-a-link preview iframe for websites that allow embedding.
- Local saved shortcuts for friends on their own devices.
- A curated website shortcut grid.
- Copyable steps you can send to friends.
- A deployment checklist for Cloudflare Pages.
Use any static file server from the repository root:
python3 -m http.server 8000Then open http://localhost:8000.
Login uses the OAuth app dashboard shown in your screenshots.
- OAuth apps guide: https://hackatime.hackclub.com/docs/oauth/oauth-apps
Steps:
- Go to https://hackatime.hackclub.com/oauth/applications and create an OAuth application.
- Use
https://YOUR-PAGES-DOMAIN.pages.dev/auth/callbackas the redirect URI. - In Cloudflare Pages → Settings → Environment variables, add:
HACKATIME_CLIENT_ID: your OAuth app UIDHACKATIME_CLIENT_SECRET: your OAuth app secretCOOKIE_SECRET: a long random string for signing sessions
- Redeploy the Pages project.
- Friends can click “Log in” and the Pages Function exchanges the returned
codefor tokens athttps://hackatime.hackclub.com/oauth/token.
After deploying, send this:
1. Open the AnyWebsite link I send you.
2. Log in when the page asks you to.
3. Paste a website link or pick a saved website card from the portal.
4. If a link is not listed, send me a request so I can review and add it.
The iframe preview follows normal browser and website rules. If a website blocks embedding, use the “Open directly” button instead.
This site has no build step.
Cloudflare Pages settings:
- Framework preset:
None - Build command: leave empty
- Build output directory:
/ - Root directory:
/ - Functions directory:
functions
Edit the resources array in script.js to add or remove website cards.