Skip to main content
This guide walks you through creating an account, setting up your team, uploading your first video, adding comments, and sharing it with others.

Prerequisites

You need:
  • A web browser (Chrome, Firefox, Safari, or Edge)
  • A video file to upload
  • An email address for account creation
Lawn works entirely in the browser. No downloads or installations required.

Create your account

1

Sign up

Navigate to the Lawn homepage and click “Sign Up”. Lawn uses Clerk for authentication, supporting:
  • Email and password
  • Google OAuth
  • GitHub OAuth
Choose your preferred method and complete the signup flow.
2

Verify your email

Check your inbox for a verification email and click the confirmation link. This activates your account and grants access to the dashboard.

Create your first team

Teams are the top-level organization structure in Lawn. All projects and videos belong to a team.
1

Open team creation

After signing in, you’ll be prompted to create your first team. If not, click the team selector in the dashboard header and choose “Create Team”.
2

Name your team

Enter a team name (e.g., “Acme Creative”, “Marketing Team”, or “Production Studio”).Lawn automatically generates a URL-friendly slug from your team name. For example:
  • “Acme Creative” becomes acme-creative
  • “Marketing Team” becomes marketing-team
This slug is used in your dashboard URLs.
3

Choose a plan

New teams start on the basic plan. You can upgrade later from team settings if you need additional storage or features.
// Team creation from convex/teams.ts
const teamId = await ctx.db.insert("teams", {
  name: args.name,
  slug,
  ownerClerkId: user.subject,
  plan: "basic",
  billingStatus: "not_subscribed",
});

// You're automatically added as team owner
await ctx.db.insert("teamMembers", {
  teamId,
  userClerkId: user.subject,
  userEmail: normalizedEmail(identityEmail(user)),
  userName: identityName(user),
  role: "owner",
});

Create a project

Projects organize videos within a team. Most teams create projects per client, campaign, or production.
1

Navigate to your team

From the dashboard, select your newly created team. You’ll see an empty state prompting you to create your first project.
2

Create project

Click “Create Project” and enter:
  • Name: Something descriptive like “Q1 Campaign” or “Client Name”
  • Description: Optional context about what this project contains
Only team members with “member” role or higher can create projects. Viewers have read-only access.

Upload your first video

1

Open the project

Click into your newly created project. You’ll see an empty video list with an upload button.
2

Select video files

Click the “Upload” button (or drag-and-drop files into the window). Select one or more video files from your computer.Supported formats include:
  • MP4
  • MOV
  • AVI
  • WebM
  • MKV
  • Any format Mux supports
3

Add video details

For each video, enter:
  • Title: Descriptive name for the video
  • Description: Optional notes or context
The video begins uploading immediately to S3 storage.
4

Wait for processing

After upload completes, Mux processes the video for streaming. Status updates:
  1. Uploading - File transferring to S3
  2. Processing - Mux encoding video
  3. Ready - Available for playback
Processing time depends on video length and resolution. Most videos are ready within 1-2 minutes.
// Video creation from convex/videos.ts
const videoId = await ctx.db.insert("videos", {
  projectId: args.projectId,
  uploadedByClerkId: user.subject,
  uploaderName: identityName(user),
  title: args.title,
  description: args.description,
  fileSize: args.fileSize,
  contentType: args.contentType,
  status: "uploading",
  muxAssetStatus: "preparing",
  workflowStatus: "review", // Default workflow status
  visibility: "public",
  publicId,
});
Individual video files have a maximum size of 5 GB. Storage quotas apply per team (100 GB for Basic, 1 TB for Pro).

Add comments and feedback

Once your video is ready, you can add timestamped comments.
1

Open the video

Click on your video in the project view to open the full video player and comment interface.
2

Play and pause

Watch the video. When you spot something that needs feedback, pause at that exact frame.
3

Add a comment

Click in the comment input field below the video. Your comment is automatically timestamped to the current playback position.Type your feedback and press Enter or click “Post”.
4

Reply to comments

Team members can reply to any comment, creating threaded conversations. Click “Reply” on any comment to add a response.
5

Resolve feedback

Once feedback is addressed, mark the comment as resolved. Resolved comments stay visible but are visually de-emphasized.
// Creating a comment from convex/comments.ts
return await ctx.db.insert("comments", {
  videoId: args.videoId,
  userClerkId: user.subject,
  userName: identityName(user),
  userAvatarUrl: identityAvatarUrl(user),
  text: args.text,
  timestampSeconds: args.timestampSeconds, // Auto-captured from player
  parentId: args.parentId, // For threaded replies
  resolved: false,
});
Comments sync in real-time. When multiple team members view the same video, they see comments appear instantly as they’re posted.

Update workflow status

Track video progress using workflow statuses:
1

Review (default)

Videos start in “review” status, indicating they’re ready for team feedback.
2

Mark as Rework

If changes are needed, update the status to “rework”. This signals the video creator that revisions are required.
3

Mark as Done

Once all feedback is addressed and the video is approved, change status to “done”.
Workflow status appears as a badge on the video and helps teams see progress at a glance in the project view.

Share with external reviewers

Need feedback from clients or stakeholders without Lawn accounts? Create a share link.
1

Open share dialog

While viewing your video, click the “Share” button in the top navigation.
2

Configure share settings

Set your sharing preferences:
  • Expiration: Optional expiration date (7 days, 30 days, or custom)
  • Password: Optional password protection for sensitive content
  • Download: Allow or prevent video downloads
3

Create link

Click “Create Share Link”. Lawn generates a unique, secure URL.
4

Send to reviewers

Copy the share link and send it to external reviewers. They can:
  • Watch the video without signing up
  • Add comments (if authenticated)
  • View existing feedback from your team
// Share link creation from convex/shareLinks.ts
await ctx.db.insert("shareLinks", {
  videoId: args.videoId,
  token, // Unique 32-character token
  createdByClerkId: user.subject,
  createdByName: identityName(user),
  expiresAt, // Optional expiration timestamp
  allowDownload: args.allowDownload ?? false,
  passwordHash, // Securely hashed password
  viewCount: 0,
});
Share links with passwords include rate limiting (10 attempts per minute) and temporary lockout after 5 failed attempts to prevent brute force attacks.

Invite team members

Grow your team by inviting collaborators.
1

Open team settings

From your team dashboard, click the team name and select “Settings”.
2

Navigate to members

Go to the “Members” tab to see current team members and pending invites.
3

Send invite

Click “Invite Member” and enter:
  • Email address: Where the invitation will be sent
  • Role: Choose access level
    • Admin: Full access except billing and team deletion
    • Member: Can upload, comment, create projects
    • Viewer: Read-only access
4

Share invite link

Lawn sends an email invitation, but you can also copy the invite link and send it directly. Invites expire after 7 days.
// Team invitation from convex/teams.ts
const token = generateToken();
const expiresAt = Date.now() + 7 * 24 * 60 * 60 * 1000; // 7 days

await ctx.db.insert("teamInvites", {
  teamId: args.teamId,
  email: inviteEmail,
  role: args.role,
  invitedByClerkId: user.subject,
  invitedByName: identityName(user),
  token,
  expiresAt,
});

Next steps

You now have a complete video review workflow in Lawn. Here’s what to explore next:

Team Management

Learn about roles, permissions, and team administration

Video Features

Deep dive into video uploads, encoding, and playback

Comments

Master threaded comments and collaboration features

Sharing

Advanced sharing options and security settings
Having issues? Check the troubleshooting guide or open an issue on GitHub.

Build docs developers (and LLMs) love