{"compiledCode":"\"use strict\";Object.defineProperty(exports, \"__esModule\", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }var _react = require('react'); var _react2 = _interopRequireDefault(_react);\n\n function Page() {\n  return (\n    _react2.default.createElement('div', { className: \"rk-directory\",}\n      , _react2.default.createElement('style', null, \".rk-directory{--ground:var(--c14pttf5-runtime-bg,#202525);--ink:var(--c14pttf5-runtime-text,#eff0e7);--accent:var(--c14pttf5-runtime-accent,#cac7a6);--soft:var(--c14pttf5-runtime-panel,#323c39);background:var(--ground);color:var(--ink);font:16px/1.7 Arial,Helvetica,sans-serif;min-height:100vh;padding:28px clamp(20px,5vw,64px) 64px;overflow-wrap:anywhere}\\n.rk-directory,.rk-directory *{box-sizing:border-box;min-width:0}.rk-directory .frame{max-width:1120px;margin:auto}.rk-directory a{color:var(--accent);text-underline-offset:4px}.rk-directory a:hover{text-decoration-thickness:2px}.rk-directory :is(a,button,input,select):focus-visible{outline:3px solid var(--accent);outline-offset:4px}.rk-directory header{display:flex;align-items:center;justify-content:space-between;gap:20px;border-bottom:1px solid var(--soft);padding-bottom:24px;margin-bottom:54px}.rk-directory .brand{font:26px Georgia,serif;color:var(--ink);text-decoration:none}.rk-directory nav{display:flex;flex-wrap:wrap;gap:6px 22px}.rk-directory nav a{display:inline-flex;align-items:center;min-height:44px;font-size:14px}.rk-directory h1{font:clamp(36px,5.5vw,66px)/1.1 Georgia,serif;letter-spacing:-1.8px;max-width:23ch;margin:0 0 28px}.rk-directory h2{font:30px/1.25 Georgia,serif;margin:44px 0 20px}.rk-directory h3{font-size:21px;margin:0 0 12px}.rk-directory p{max-width:76ch;margin:0 0 20px}.rk-directory li{margin-bottom:12px;max-width:80ch}.rk-directory .hero{padding:20px 0 32px}.rk-directory .hero p:first-of-type{font-size:20px;max-width:60ch}.rk-directory .hero a{display:inline-flex;align-items:center;min-height:44px}.rk-directory .cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,260px),1fr));gap:18px;list-style:none;padding:0}.rk-directory .cards li{margin:0;padding:22px;background:var(--soft);border-radius:6px;border:1px solid #52605b}.rk-directory .cards a{font-size:18px}.rk-directory .cards p{margin:12px 0 0;font-size:15px}.rk-directory .catalog-controls{display:flex;flex-wrap:wrap;gap:20px;margin-bottom:18px}.rk-directory label{display:grid;gap:8px;flex:1 1 240px}.rk-directory :is(input,select,button){font:inherit;min-height:48px;border-radius:4px;border:1px solid var(--accent);padding:10px 14px;background:var(--ground);color:var(--ink);max-width:100%}.rk-directory button{cursor:pointer}.rk-directory .meta{font-size:13px;color:var(--accent)}.rk-directory .app-card{display:flex;flex-direction:column;gap:10px}.rk-directory .app-card p{margin:0}.rk-directory .app-card .profile{margin-top:auto;min-height:44px;display:inline-flex;align-items:center}.rk-directory .table-wrap{max-width:100%;overflow-x:auto}.rk-directory table{border-collapse:collapse;min-width:680px;width:100%}.rk-directory :is(th,td){text-align:left;padding:14px;border-bottom:1px solid var(--soft);vertical-align:top}.rk-directory footer{margin-top:60px;padding-top:24px;border-top:1px solid var(--soft);font-size:13px}.rk-directory footer nav{margin-top:18px}.rk-directory .empty{padding:28px;border:1px solid var(--accent);border-radius:6px}.rk-directory .eyebrow{font-size:12px;letter-spacing:2px;color:var(--accent);margin-bottom:20px}@media(max-width:640px){.rk-directory header{align-items:flex-start;flex-direction:column;margin-bottom:34px}.rk-directory nav{gap:4px 18px}.rk-directory h1{letter-spacing:-1px}.rk-directory h2{font-size:27px}.rk-directory .catalog-controls{gap:14px}.rk-directory .hero{padding-top:8px}}\")\n      , _react2.default.createElement('div', { className: \"frame\",}\n\n        , _react2.default.createElement('h1', null, \"Guides to choosing and using software\"     )\n        , _react2.default.createElement('p', null, \"Start with the job you need done. Use the directory to discover options, then use these guides to build a brief, run a trial, and decide what fits. Product comparisons include sourced capabilities and plan checks; worked examples and acceptance criteria are clearly labeled. We distinguish documentation-based recommendations from observed product tests.\"\n\n\n\n\n\n\n        )\n        , _react2.default.createElement('h2', null, \"Choose within a category\"   )\n        , _react2.default.createElement('ul', null\n          , _react2.default.createElement('li', null\n            , _react2.default.createElement('a', { href: \"/blog/choose-productivity-app\",}, \"How to choose a productivity app: tasks, notes, or projects?\"\n\n            ), \" \", \"— Match Todoist, Notion, or Trello to your main productivity problem, then use a week-shaped sample to choose what you will maintain.\"\n\n\n\n          )\n          , _react2.default.createElement('li', null\n            , _react2.default.createElement('a', { href: \"/blog/choose-project-management-software\",}, \"How to choose project management software: a buyer checklist\"\n\n            ), \" \", \"— Choose the right level of project structure with a role map, handoff acceptance criteria, and documented examples from Trello and Notion.\"\n\n\n\n          )\n          , _react2.default.createElement('li', null\n            , _react2.default.createElement('a', { href: \"/blog/choose-crm-small-business\",}, \"How to choose a CRM for a small business: a practical checklist\"\n\n            ), \" \", \"— Define your sales process, test duplicates and ownership, compare required plans, and use a copyable CRM acceptance checklist.\"\n\n\n          )\n          , _react2.default.createElement('li', null\n            , _react2.default.createElement('a', { href: \"/blog/choose-email-marketing-software\",}, \"How to choose email marketing software: a buyer checklist\"\n\n            ), \" \", \"— Evaluate contact billing, segmentation, campaign creation, automation exits, and audience exports with a practical acceptance checklist.\"\n\n\n\n          )\n        )\n        , _react2.default.createElement('h2', null, \"Compare named apps and find alternatives\"     )\n        , _react2.default.createElement('ul', null\n          , _react2.default.createElement('li', null\n            , _react2.default.createElement('a', { href: \"/blog/notion-vs-trello\",}, \"Notion vs Trello: projects, permissions, and export compared\"\n\n            ), \" \", \"— Choose Notion for connected project knowledge or Trello for a shared work queue, with sourced feature, free-plan, and portability tradeoffs.\"\n\n\n\n          )\n          , _react2.default.createElement('li', null\n            , _react2.default.createElement('a', { href: \"/blog/trello-vs-todoist\",}, \"Trello vs Todoist: features, free plans, and who each fits\"\n\n            ), \" \", \"— Choose between shared project stages and daily task planning with sourced plan limits, recurrence, export differences, and a five-task test.\"\n\n\n\n          )\n          , _react2.default.createElement('li', null\n            , _react2.default.createElement('a', { href: \"/blog/trello-alternatives\",}, \"5 Trello alternatives for tasks, projects, and client work\"\n\n            ), \" \", \"— Compare Todoist, Notion, Asana, ClickUp, and Basecamp by the job replacing Trello, the tradeoff, and what to validate before switching.\"\n\n\n\n          )\n        )\n        , _react2.default.createElement('h2', null, \"Build a shortlist and test it\"     )\n        , _react2.default.createElement('ul', null\n          , _react2.default.createElement('li', null\n            , _react2.default.createElement('a', { href: \"/blog/choose-an-app\",}, \"How to choose an app: requirements, shortlist, and decision\"\n\n            ), \" \", \"— Create a five-line software brief, rule out unsuitable apps, and choose two or three candidates with clear stop conditions.\"\n\n\n          )\n          , _react2.default.createElement('li', null\n            , _react2.default.createElement('a', { href: \"/blog/run-a-software-trial\",}, \"Software trial checklist: test the workflow before paying\"\n\n            ), \" \", \"— Plan a bounded software evaluation with routine, handoff, failure, and exit checks, plus clear pass, fail, and unresolved outcomes.\"\n\n\n          )\n          , _react2.default.createElement('li', null\n            , _react2.default.createElement('a', { href: \"/blog/compare-apps-fairly\",}, \"How to compare software: a decision matrix without fake scores\"\n\n            ), \" \", \"— Use disqualifiers and evidence labels to compare apps fairly, with a worked pass, fail, and unresolved decision matrix.\"\n\n\n          )\n        )\n        , _react2.default.createElement('h2', null, \"Understand plans and workflow fit\"    )\n        , _react2.default.createElement('ul', null\n          , _react2.default.createElement('li', null\n            , _react2.default.createElement('a', { href: \"/blog/read-saas-pricing\",}, \"How to compare SaaS pricing: seats, usage, and annual cost\"\n\n            ), \" \", \"— Calculate comparable SaaS costs with seat and usage scenarios, required-plan rules, and a worked annual-billing break-even example.\"\n\n\n          )\n          , _react2.default.createElement('li', null\n            , _react2.default.createElement('a', { href: \"/blog/free-plan-vs-free-trial\",}, \"Free plan vs free trial: limits, billing, and what happens next\"\n\n            ), \" \", \"— Understand ongoing free access versus time-limited paid features, with a feature-state table and end-of-trial decision checklist.\"\n\n\n          )\n          , _react2.default.createElement('li', null\n            , _react2.default.createElement('a', { href: \"/blog/browser-desktop-mobile-apps\",}, \"Web vs desktop vs mobile apps: choose by the required task\"\n\n            ), \" \", \"— Use a device-fit worksheet to test editing, offline behavior, reconnect conflicts, and recipient access on the platforms you actually need.\"\n\n\n\n          )\n          , _react2.default.createElement('li', null\n            , _react2.default.createElement('a', { href: \"/blog/all-in-one-vs-specialist-apps\",}, \"All-in-one software vs specialist apps: how to choose\"\n\n            ), \" \", \"— Compare a suite, a specialist stack, and a small combination by workflow boundaries, ownership, connection cost, and switching effort.\"\n\n\n\n          )\n          , _react2.default.createElement('li', null\n            , _react2.default.createElement('a', { href: \"/blog/check-app-integrations\",}, \"App integration checklist: sync, permissions, and failure tests\"\n\n            ), \" \", \"— Validate a connector beyond its logo: map direction, identifiers, blank values, retries, ownership, and recovery with a sample event.\"\n\n\n          )\n        )\n        , _react2.default.createElement('h2', null, \"Replace or manage existing apps\"    )\n        , _react2.default.createElement('ul', null\n          , _react2.default.createElement('li', null\n            , _react2.default.createElement('a', { href: \"/blog/check-data-export\",}, \"SaaS data export checklist: test portability before switching\"\n\n            ), \" \", \"— Inspect records, relationships, files, dates, and access with a copyable reconciliation worksheet and a clear export acceptance rule.\"\n\n\n\n          )\n          , _react2.default.createElement('li', null\n            , _react2.default.createElement('a', { href: \"/blog/find-app-alternatives\",}, \"How to find app alternatives that solve the reason for switching\"\n\n            ), \" \", \"— Turn a switching complaint into a replacement requirement, include the no-change option, and check whether a candidate is an alternative or a complement.\"\n\n\n\n          )\n          , _react2.default.createElement('li', null\n            , _react2.default.createElement('a', { href: \"/blog/switch-apps-without-losing-work\",}, \"Switching apps checklist: migration, cutover, and rollback\"\n\n            ), \" \", \"— Plan a software move with a dependency inventory, sample reconciliation, edit freeze, acceptance owner, and explicit rollback trigger.\"\n\n\n\n          )\n          , _react2.default.createElement('li', null\n            , _react2.default.createElement('a', { href: \"/blog/audit-app-subscriptions\",}, \"App subscription audit checklist: owners, overlap, and renewals\"\n\n            ), \" \", \"— Inventory your software subscriptions, distinguish commitments from cash savings, and assign keep, reduce, replace, or cancel actions.\"\n\n\n\n          )\n        )\n        , _react2.default.createElement('h2', null, \"Developer Tools: search and AI retrieval\"     )\n        , _react2.default.createElement('p', null, \"These specialist references are for people building or evaluating search and retrieval-augmented AI features. They cover local evaluation, candidate coverage, and ordering. They are one category within the directory, not prerequisites for choosing everyday apps. The catalog currently lists GitHub for software collaboration; this reading series does not imply a populated catalog of search engines or embedding providers.\"\n\n\n\n\n\n\n\n        )\n        , _react2.default.createElement('ul', null\n          , _react2.default.createElement('li', null\n            , _react2.default.createElement('a', { href: \"/blog/hybrid-search-explained\",}, \"Hybrid search explained: lexical, vector, and rank fusion\"\n\n            ), \" \", \"— Learn when lexical and vector search complement each other, how reciprocal rank fusion works, and which costs to measure before combining them.\"\n\n\n\n          )\n          , _react2.default.createElement('li', null\n            , _react2.default.createElement('a', { href: \"/blog/choose-embedding-model-by-measuring\",}, \"How to choose an embedding model: evaluate your own corpus\"\n\n            ), \" \", \"— Compare embedding models on held-out local queries, relevance judgments, latency, index size, and migration cost rather than leaderboard rank.\"\n\n\n\n          )\n          , _react2.default.createElement('li', null\n            , _react2.default.createElement('a', { href: \"/blog/do-you-need-a-reranker\",}, \"Do you need a reranker? Quality, latency, and cost tradeoffs\"\n\n            ), \" \", \"— Decide whether reranking can fix your search failure, with candidate-coverage checks, batch-latency arithmetic, and a cost decision table.\"\n\n\n\n          )\n          , _react2.default.createElement('li', null\n            , _react2.default.createElement('a', { href: \"/blog/why-rag-answers-from-the-wrong-document\",}, \"Wrong RAG answers: diagnose retrieval, context, and generation\"\n\n            ), \" \", \"— Trace a wrong RAG answer through source coverage, retrieved candidates, final context, and generation to choose the right corrective experiment.\"\n\n\n\n          )\n          , _react2.default.createElement('li', null\n            , _react2.default.createElement('a', { href: \"/blog/rag-evaluation-mistakes\",}, \"6 RAG evaluation mistakes: retrieval, answers, and refusal\"\n\n            ), \" \", \"— Build a layered RAG scorecard for evidence recall, context quality, groundedness, correctness, unanswerable questions, and over-refusal.\"\n\n\n\n          )\n          , _react2.default.createElement('li', null\n            , _react2.default.createElement('a', { href: \"/blog/open-relevance-benchmarks-transfer\",}, \"Retrieval benchmarks: what BEIR and MTEB tell you\"\n\n            ), \" \", \"— Use retrieval benchmarks to shortlist models, then check task, judgments, domain, contamination, and transfer with a local evaluation.\"\n\n\n\n          )\n        )\n        , _react2.default.createElement('p', null\n          , _react2.default.createElement('a', { href: \"/categories/developer-tools\",}, \"Browse Developer Tools\"  ), \" ·\" , \" \"\n          , _react2.default.createElement('a', { href: \"/apps\",}, \"Explore all apps\"  ), \" ·\" , \" \"\n          , _react2.default.createElement('a', { href: \"/categories\",}, \"Browse all categories\"  )\n        )\n        , _react2.default.createElement('aside', null\n          , _react2.default.createElement('p', null, \"Discover software by the job you need done. Product descriptions are documentation-based; listing order is alphabetical.\"\n\n\n          )\n          , _react2.default.createElement('nav', { 'aria-label': \"Footer navigation\" ,}\n            , _react2.default.createElement('a', { href: \"/about\",}, \"About\")\n            , _react2.default.createElement('a', { href: \"/methodology\",}, \"Methodology\")\n            , _react2.default.createElement('a', { href: \"/disclosure\",}, \"Disclosure\")\n            , _react2.default.createElement('a', { href: \"/contact\",}, \"Suggest an app\"  )\n          )\n        , _react2.default.createElement('p', { className: \"meta\",}, \"Ranker.dev is an independent software directory and publication. It is not affiliated with Ranker, Inc. or ranker.com.\"                ))\n      )\n    )\n  );\n} exports.default = Page;"}