Recording of the visual regression run on www.linecal.com · linecal — app walkthrough.

In this video· click a step to jump to it

W
Passed ✓

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);
  };
+138 more lines — claim the test to get the full code.

Checks run

Run
✓
Visual
7.13%
Text
—
DOM
✓
Network
+14 −35
Console
✓
A11y
—
Perf
—
URL
✓
Variables
—
Full report
Log in →
10,753
Diff px
1m 26s
Duration
—
Accessible

Notes from the demo run

AI-generated

Linecal'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.

Highlights
  • Linear timeline isn't just a gimmick
    Once 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 great
    On 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 complexity
    Parent 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 popup
    The 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.
Friction points
  • Anonymous home + authed home share the same / URL
    Linecal 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 error
    Direct 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 routes
    Every 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 text
    The '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.
Couldn't reach
  • /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

Step 1334 px changed
Before
Before
After
After
Diff
Diff
Step 21,577 px changed
Before
Before
After
After
Diff
Diff
Step 32,895 px changed
Before
Before
After
After
Diff
Diff
Step 41,810 px changed
Before
Before
After
After
Diff
Diff
Step 5517 px changed
Before
Before
After
After
Diff
Diff
Step 61,810 px changed
Before
Before
After
After
Diff
Diff
Step 71,810 px changed
Before
Before
After
After
Diff
Diff

Share this run

Earned · Lastest awards

Proof your app is not AI slop

LASTEST
starter
tests
all passing
regressions
0
Badges stay live, ratchet upward, only downgrade on confirmed regression.
57,604 test runs recorded · 1,174 products tested with Lastest

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.