Dev tools Hub API

Published: (December 14, 2025 at 11:46 AM EST)
3 min read
Source: Dev.to

Source: Dev.to

What I Built

Submission for the Xano AI-Powered Backend Challenge: Production‑Ready Public API

Title: DevTools Resource Hub API
Available: True

DevTools APIs

  • Xano Hub API
  • Xano Assisted Production API

Software Backend Architecture

Architecture Diagram 1

The backend follows a layered, modular design suitable for an MVP. API endpoints expose REST interfaces, protected by authentication, rate limiting, and validation. Core business logic is isolated into services such as search, recommendations, and scoring. A data‑access layer handles queries, caching, and transactions on PostgreSQL. Event handling and background jobs enable scalable, asynchronous integrations.

Architecture Diagram 2

Architecture Diagram 3

Architecture Diagram 4

Caching Strategy Overview

Caching Strategy

Database Schema

tools

ColumnTypeConstraints / Description
idSERIALPrimary Key
nameVARCHAR(255)Unique, Not Null
slugVARCHAR(255)Unique, URL‑safe
category_idINTEGERFK → categories.id
descriptionTEXTTool description
taglineVARCHAR(500)Short marketing line
website_urlVARCHAR(500)Official website
logo_urlVARCHAR(500)Logo image URL
founded_dateDATECompany founding date
company_nameVARCHAR(255)Company behind the tool
is_activeBOOLEANDefault: true
query_countINTEGERDefault: 0 (trending score)
last_queried_atTIMESTAMPLast API query time
created_atTIMESTAMPDefault: now()
updated_atTIMESTAMPDefault: now()

Indexes

  • category_id
  • slug
  • is_active
  • (query_count, last_queried_at)

categories

ColumnTypeConstraints / Description
idSERIALPrimary Key
nameVARCHAR(255)Unique, Not Null
slugVARCHAR(255)Unique
parent_idINTEGERSelf FK → categories.id
descriptionTEXTCategory description
iconVARCHAR(100)Icon identifier
display_orderINTEGERDefault: 0
created_atTIMESTAMPCreated timestamp

Indexes

  • parent_id
  • slug

pricing_tiers

ColumnTypeConstraints / Description
idSERIALPrimary Key
tool_idINTEGERFK → tools.id (CASCADE)
tier_nameVARCHAR(100)Free, Starter, Pro
monthly_priceDECIMAL(10,2)Nullable
annual_priceDECIMAL(10,2)Nullable
currencyVARCHAR(3)Default: USD
billing_cycleENUMmonthly, annual, one-time
features_jsonJSONBFlexible features list
limits_jsonJSONBAPI limits, users, storage
is_currentBOOLEANDefault: true
effective_fromTIMESTAMPPricing start
effective_toTIMESTAMPNullable
created_atTIMESTAMPCreated timestamp

Indexes

  • (tool_id, is_current)
  • (effective_from, effective_to)

alternatives

ColumnTypeConstraints / Description
idSERIALPrimary Key
tool_idINTEGERFK → tools.id
alternative_idINTEGERFK → tools.id
similarity_scoreDECIMAL(5,2)Range: 0–100
match_basisENUMfeatures, pricing, category
comparison_notesTEXTComparison details
upvotesINTEGERDefault: 0
created_atTIMESTAMPCreated timestamp
updated_atTIMESTAMPUpdated timestamp

Constraints

  • UNIQUE(tool_id, alternative_id)
  • tool_id <> alternative_id

Indexes

  • tool_id
  • similarity_score DESC

reviews_aggregate

ColumnTypeConstraints / Description
idSERIALPrimary Key
tool_idINTEGERFK → tools.id
sourceVARCHAR(50)g2, capterra, producthunt
avg_ratingDECIMAL(3,2)Range: 0–5
total_reviewsINTEGERReview count
rating_breakdownJSONBe.g. {5:120,4:45,...}
source_urlVARCHAR(500)Review page URL
last_scraped_atTIMESTAMPScraping time
created_atTIMESTAMPCreated timestamp

Indexes

  • (tool_id, source)
  • avg_rating DESC

features

ColumnTypeConstraints / Description
idSERIALPrimary Key
tool_idINTEGERFK → tools.id
feature_nameVARCHAR(255)Feature title
feature_categoryVARCHAR(100)Auth, API, Database
is_availableBOOLEANDefault: true
tier_availabilityVARCHAR(50)free, pro, all
descriptionTEXTFeature details
created_atTIMESTAMPCreated timestamp

Indexes

  • tool_id
  • feature_category
  • is_available

changelog

ColumnTypeConstraints / Description
idSERIALPrimary Key
tool_idINTEGERFK → tools.id
change_typeENUMpricing, feature, update
change_summaryVARCHAR(500)Short summary
change_detailsTEXTDetailed change
old_valueJSONBPrevious value
new_valueJSONBUpdated value
changed_atTIMESTAMPWhen change occurred
created_atTIMESTAMPCreated timestamp

Indexes

  • (tool_id, changed_at DESC)
  • change_type

integrations

ColumnTypeConstraints / Description
idSERIALPrimary Key
tool_idINTEGERFK → tools.id
integrates_withINTEGERFK → tools.id
integration_typeENUMnative, api, webhook, zapier
ease_of_setupENUMeasy, medium, complex
documentation_urlVARCHAR(500)Docs link
is_officialBOOLEANDefault: false
created_atTIMESTAMPCreated timestamp

Indexes

  • tool_id
  • integrates_with

API Documentation

Tools API

1️⃣ Get All Tools

Endpoint

GET /tools/

Query Parameters

ParameterTypeDescription
categorystring (optional)Filter by category
price_minnumber (optional)Minimum price
price_maxnumber (optional)Maximum price
featuresarray of strings (optional)Required features
sortstring (default: “name”)Sorting field
pagenumber (default: 1)Page number
sizenumber (default: 10)Page size

Response Example

{
  "items": [
    {
      "id": 1,
      "name": "VS Code",
      "slug": "vs-code",
      "category_id": 3,
      "description": "Free source‑code editor",
      "website_url": "https://code.visualstudio.com/",
      "logo_url": "https://example.com/logo.png",
      "is_active": true,
      "query_count": 124,
      "last_queried_at": "2025-11-01T12:34:56Z"
    }
    // …more tools
  ],
  "page": 1,
  "size": 10,
  "total_items": 342,
  "total_pages": 35
}

2️⃣ Get Tool Details

Endpoint

GET /tools/{id}/

Path Parameter

  • id – Integer ID of the tool.

Response Example

{
  "id": 1,
  "name": "VS Code",
  "slug": "vs-code",
  "category": {
    "id": 3,
    "name": "IDE"
  },
  "description": "Free source‑code editor",
  "website_url": "https://code.visualstudio.com/",
  "logo_url": "https://example.com/logo.png",
  "features": [
    { "name": "IntelliSense", "available": true },
    { "name": "Debugging", "available": true }
  ],
  "pricing_tiers": [
    { "tier_name": "Free", "monthly_price": null, "annual_price": null }
  ],
  "reviews": {
    "avg_rating": 4.7,
    "total_reviews": 215
  }
}

3️⃣ Search Tools

Endpoint

GET /tools/search/

Query Parameters

ParameterTypeDescription
qstringSearch term (name, tagline, etc.)
pagenumberPage number (default 1)
sizenumberPage size (default 10)

Response – Same structure as Get All Tools but filtered by the search term.

Categories API

Endpoint

GET /categories/

Returns a list of tool categories with their hierarchy.

Pricing Tiers API

Endpoint

GET /tools/{id}/pricing/

Provides current and historical pricing information for a specific tool.

Alternatives API

Endpoint

GET /tools/{id}/alternatives/

Returns a ranked list of alternative tools based on similarity score.

Reviews Aggregate API

Endpoint

GET /tools/{id}/reviews/

Aggregates ratings from external sources (G2, Capterra, Product Hunt).

Features API

Endpoint

GET /tools/{id}/features/

Lists all features of a tool, grouped by category and tier availability.

Changelog API

Endpoint

GET /tools/{id}/changelog/

Provides a chronological list of changes (pricing, features, updates).

Integrations API

Endpoint

GET /tools/{id}/integrations/

Shows native and third‑party integrations for the tool.

Back to Blog

Related posts

Read more »

Stop crawling my HTML – use the API

Article URL: https://shkspr.mobi/blog/2025/12/stop-crawling-my-html-you-dickheads-use-the-api/ Comments URL: https://news.ycombinator.com/item?id=46265579 Point...