Don't waste time on Stripe subscriptions or designing a pricing section. Get started today with our battle-tested stack and built-in monetization features.
Get Lifetime Access
© 2026 Dirstarter. All rights reserved.
All UI components have been migrated from Radix UI to Base UI for a more modern, flexible foundation
We've migrated all UI components from Radix UI to Base UI — a lower-level, unstyled component library that gives you more control over rendering and styling.
asChild prop has been replaced with Base UI's render prop and useRender hook for polymorphic renderingtailwind-variants instead of cva, with support for multi-element slot stylingdata-open, data-horizontal, etc.) instead of Radix's data-state attributesIf you've customized any UI components, you'll need to update:
asChild → render prop — Components no longer accept asChild. Use the render prop with a callback insteaddata-state="open" with data-open, and similar Base UI attribute conventionstailwind-variants syntax. Check components/common/ for updated patterns@radix-ui/react-slot — Use the new slot() utility from lib/slot.ts backed by Base UI's mergePropsBlog posts are now fully managed through the admin dashboard with a rich text editor, scheduling, and database storage
Blog posts are no longer stored as static MDX files. They now live in your database with a full admin interface for creating, editing, and publishing – giving you complete control over your content without touching code.

If you're upgrading from a previous version that used file-based MDX blog posts, a migration script is included to automatically move your content to the database:
Signed-in users can now bookmark tools and manage them from a dedicated dashboard tab
We've added tool bookmarks so your users can save tools they find interesting and come back to them later — all from a dedicated tab in their dashboard.

Bookmarks are stored as a simple relation between users and tools, with a unique constraint ensuring each tool can only be bookmarked once per user. When a user or tool is deleted, associated bookmarks are automatically cleaned up via cascading deletes.
The bookmark button appears alongside existing tool actions (report, embed, visit) and visually indicates whether a tool is already saved.
Replace the simple featured flag with a flexible three-tier system for tool listings
We've replaced the simple "featured" toggle with a three-tier listing system that gives you more flexibility in how you monetize and display tools in your directory.
The tier system is built into your Stripe products. Add a tier field to your product metadata (e.g., tier: "Standard" or tier: "Premium"), and the webhook will automatically update the tool's tier when a purchase completes.
In the admin panel, you'll now see a tier dropdown instead of the old "Feature this tool" toggle. This gives you full control over tool visibility and benefits without requiring a payment.
A new admin interface for managing ads directly in your dashboard with full CRUD functionality and campaign scheduling
Managing ads on your directory is now as simple as managing tools, categories, or tags. We've added a dedicated admin interface for creating, editing, and organizing ads directly from your dashboard—no more manual database edits.

You'll find a new "Ads" link in your admin sidebar. From there, you can view all your ads in a sortable, filterable table, create new campaigns with the comprehensive form, and manage existing ads with familiar actions.
SKIP_ENV_VALIDATION=1 bun run scripts/migrate-posts.tsThe script parses frontmatter, extracts plain text for search, and inserts each post into the database. It's safe to run multiple times – posts with existing slugs are skipped.
Existing featured tools have been automatically migrated to the Premium tier. All other tools start at the Free tier. No action is required on your part.
This feature makes it easier to monetize your directory by giving you full control over your advertising placements.