In this video· click a step to jump to it
Test recording
linecal — app walkthrough
86,208 ms · 10,753 pixels changed
We built this regression test for www.linecal.com — it's yours to keep, free.
Take this test with you
This is a real Playwright test, recorded against www.linecal.com. Claim it into your own workspace and re-run it on every deploy — free.
export async function test(page, baseUrl, screenshotPath, stepLogger) {
// Verified demo account (confirmed via [email protected] inbox on 2026-05-18).
const DEMO_EMAIL = '[email protected]';
const DEMO_PASSWORD = '•••';
const shot = (n, slug) => screenshotPath.replace('.png', `-${n}-${slug}.png`);
const settle = () => page.waitForLoadState('networkidle').catch(() => {});
const hydrate = async () => {
await page.locator('h1, h2, main, [role="main"], button, input').first().waitFor({ state: 'visible', timeout: 8000 }).catch(() => {});
await page.waitForTimeout(400);
};
Checks run
Notes from the demo run
AI-generatedLinecal's authenticated app is genuinely distinctive. A horizontal linear timeline (one continuous row of days, week-of-day letters above each column) replaces the typical 7×5 grid, and a Task Board sits below as a second canvas — kanban columns for Backlog / To Do / In Progress with a Status/Timeline toggle. The auth modal is admirably minimal (3 inputs + 4 OAuth providers), and the post-login 'Local Data Found' migration dialog quietly carries any anonymous-session calendar work into the new account instead of throwing it away. The 'Add New Event' dialog is dense but clean: parent event, category dropdown, label, start/end date + time, all-day toggle, timezone hint, category, color, plus 'Add Location' / 'Add External Link' affordances and a Description field — clearly designed for power-users with mixed personal/work calendars.
- Linear timeline isn't just a gimmickOnce authed, the calendar replaces the home's marketing widget with a real horizontal scrolling timeline. Days run continuously, weekend cells are subtly faded. Easier to see 'the next 3 weeks at a glance' than any traditional month grid I've used.
- Local Data Found migration is rare and greatOn first authed landing the app detects anonymous-session calendar data in localStorage and asks 'move this data into your account, or leave it behind?' Most indie tools throw away the pre-signup work; Linecal carries it across. Worth promoting on the home page, not hiding behind the auth wall.
- Add Event dialog is honest about complexityParent Event + Task Management category + Label + Date/Time + All-day + Timezone hint + Color + Add Location + Add External Link + Description, all in one panel. No hidden 'Advanced' fold. The Premium upsell sits as a quiet '🔒 Unlocked' tag rather than a paywall surprise.
- Pricing surfaced via View menu, not a paywall popupThe View dropdown lists 'Show Year View' (free), 'Show Month View PREMIUM', 'Show Week View PREMIUM', and 'Show Task Board' (free) inline. You can see what you're getting at each tier without leaving the calendar.
- Anonymous home + authed home share the same / URLLinecal serves the marketing landing AND the calendar app at https://www.linecal.com/, with content depending on auth state. Means a public/r/share or social unfurl of the URL will look completely different to authed vs anonymous viewers — and the embedded January 2024 calendar widget on the anonymous home can confuse first-time visitors who think the app is locked to a specific year.
- /propose-time renders a raw errorDirect nav to /propose-time (without a token) shows 'Error: Invalid or missing proposal token.' on a cookie-cutter card. SEO-found visitors will read it as broken. A friendlier 'this link needs a valid proposal token, here's how proposals work' page would be more welcoming.
- SPA returns server 404 for all routesEvery non-/ route (/features, /help, /privacy, /propose-time, /terms) returns HTTP 404 from the edge even though the SPA renders them client-side. Means Google won't index marketing pages and shared deep links may be flagged as broken by Slack/Twitter unfurlers. A catch-all rewrite to index.html in the host config would fix it.
- Auth-modal switch button is unlabelled-button textThe 'Already have an account? Log In' switch inside the Sign Up modal is a single <button> with that full sentence as its accessible name. Screen readers will read the entire phrase, not just 'Log In', and assistive-tech users may miss the affordance entirely. A two-element layout ('Already have an account?' + a separate 'Log In' button) would be more legible.
- /propose-time (with token)·No real proposal token available — would need to seed a proposal from an existing account first
- Pricing tier upgrade flow·Stopped at the Premium badges in the View menu rather than clicking Upgrade — avoiding any paid-checkout surface in the demo
7 visual changes
Share this run
Proof your app is not AI slop
This test was built for www.linecal.com — claim it free
One click copies the test and baseline screenshots into your own Lastest workspace. Re-run on every deploy and catch regressions before your users do — free, no card required.




















