UGC Reactions from Real Creators
Real creator library videos at $11 and images at $8. Custom production from $25/video with a $250 minimum. Commercial licensing included.
翻訳待ち
Bio pages and smart deep links that open in the real browser, with 18+ warning pages, custom domains and live analytics. Free to start.
翻訳待ち
マーケティングTypeScript · HTMLGitHub @Swanny-aiオンライン所有者未確認
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗A link-in-bio platform for creators. One page with all your links, a visual editor with a live phone preview, per-link content warnings, privacy-respecting analytics, and a Free/Pro plan with Stripe billing.
"ViewLink" is a working name. Change it in
src/config/brand.ts. Product decisions are in../docs/spec.md.
Auth: email and password (bcrypt), optional Google sign-in. Auth.js v5 with JWT sessions. Password reset and email confirmation use single-use, expiring tokens; only their hashes are stored. Resetting or changing a password signs out every other device. Sign-up, sign-in and reset requests are rate-limited, and reset requests never reveal whether an email has an account.
Onboarding: claim /<username> with a live availability check and reserved-word rules.
Editor: link, header, text and social-icon blocks. Drag or keyboard reordering, show/hide, undoable delete, profile photo, bio, SEO fields, eight themes (four on Free), Pro custom colors and fonts, a live phone preview, and autosave.
Public page /<username>: server-rendered and cached, refreshed on every save. Title,
description, canonical URL, Open Graph image, ProfilePage JSON-LD, real 404s for unknown names.
Click tracking: every link goes through /go/<id>, which logs the click after responding
and returns a 302. Works without JavaScript.
View tracking: a small beacon (/api/v) with a <noscript> fallback. Bots are dropped.
No cookies, no raw IP addresses (visitors are a daily-rotating salted hash).
Content warnings: optional interstitial per link, with custom text on Pro and a pass-through rate in analytics.
In-app browsers: visitors inside Instagram, TikTok, Facebook and others see a tip on opening the page in their real browser.
Smart links (/l/<slug>): short links with an adult content warning that is on by
default. Visitors see an 18+ page in one of 12 original designs (live phone and desktop
preview in the dashboard), with default wording in English, Spanish, Portuguese, French,
German or Italian based on the visitor's browser. Visitors can continue or leave, and each
link shows warning views, confirmation rate and visits for the last 30 days. Free: 3 links.
Pro: 100 links, custom wording, and badge removal. Bio-page content warnings can use the same
designs (Editor → Theme → Content-warning page style).
Global dashboard (/dashboard): one view of every bio-page view and smart-link visit.
Includes:
Pro adds a world map (log-scale shading), top countries and live locations. Free history is limited to 30 days.
Analytics: views, daily-unique visitors, clicks, CTR, a daily chart, and per-link stats. Pro adds traffic sources, referrers, countries, devices and up to 365 days.
Billing: Stripe Checkout (monthly or yearly), the Customer Portal, signed and idempotent webhooks, and server-enforced plan limits. Downgrading never deletes data.
Account: change password, and delete account (cancels the subscription and removes all data).
Next.js 16 (App Router, Cache Components, Turbopack) · React 19 · TypeScript · Tailwind CSS v4 · shadcn/ui (Base UI) · PostgreSQL + Prisma 7 · Auth.js v5 · Stripe · Recharts · dnd-kit · Zustand · Vitest · Playwright + axe
Requirements: Node.js 20.9 or newer (developed on 24) and npm. No system PostgreSQL is
needed, because a local server runs from node_modules.
cd tendril
npm install
npm 11 blocks dependency install scripts by default. If prisma generate or the database
fails to start after installing, approve the scripts these packages need, then rebuild them:
npm install-scripts approve prisma @prisma/engines @embedded-postgres/windows-x64 esbuild unrs-resolver
npm rebuild
On macOS or Linux, replace @embedded-postgres/windows-x64 with your platform's package
(for example @embedded-postgres/darwin-arm64 or @embedded-postgres/linux-x64).
Configure the environment. Copy .env.example to .env, then set AUTH_SECRET
(generate one with npx auth secret) and CRON_SECRET (any random string). The defaults
work for everything else locally.
Start the database in its own terminal, and leave it running:
npm run db:start
This runs PostgreSQL on 127.0.0.1:54329 with its data in .pgdata/. To use your own
Postgres instead, point DATABASE_URL at it and skip this step.
Create the tables, and optionally seed the demo account (30 days of sample analytics):
npm run db:migrate
npm run db:seed
The demo login is defined in prisma/seed.mts. Its public page is
http://localhost:3000/demo.
Run the app:
npm run dev
Open http://localhost:3000.
This is the beginning of the README. Read the rest at the original. Read the full README ↗