Skip to content

API Reference ​

mineproj generates a fully static REST-like API under dist/api/v1/. Every endpoint serves static JSON — no backend required.

Envelope ​

Every response follows this structure:

json
{
  "apiVersion": "v1",
  "kind": "ProjectList",
  "generatedAt": "2026-01-01T00:00:00.000Z",
  "schemaVersion": 1,
  "data": { ... }
}

Endpoints ​

EndpointKindDescription
/api/v1/projects.jsonProjectListFull project list
/api/v1/projects/<slug>.jsonProjectSingle project detail
/api/v1/tags.jsonTagListAll tags with counts
/api/v1/categories.jsonCategoryListAll categories
/api/v1/collections.jsonCollectionListAll collections
/api/v1/profile.jsonProfileProfile data
/api/v1/stats.jsonStatsAggregated statistics
/api/v1/search.jsonSearchIndexMiniSearch index
/api/v1/feed.jsonFeedFeed items
/api/v1/manifest.jsonManifestSelf-describing endpoint list

Query Parameters (dev mode) ​

ParamExampleDescription
q?q=webFull-text search
tag?tag=web,gameFilter by tags (AND)
category?category=webFilter by category
status?status=releasedFilter by status
sort?sort=createdAt:descSort field and direction
page?page=2Page number
pageSize?pageSize=20Items per page
lang?lang=enLocale for localized data

Client SDK ​

ts
import { createApiClient } from '@mineproj/client';

const api = createApiClient({ baseUrl: 'https://example.com' });
const projects = await api.getProjects();
const project = await api.getProject('my-project');
const results = await api.search('web');

React hooks:

ts
import { useProjects, useProject, useTags, useSearch } from '@mineproj/client';

function MyComponent() {
  const { data, loading } = useProjects({ tag: 'web' });
  return <div>{loading ? 'Loading...' : data.length} projects</div>;
}

Released under the Apache-2.0 License.