| Crates.io | systemprompt-content |
| lib.rs | systemprompt-content |
| version | 0.0.11 |
| created_at | 2026-01-21 19:34:53.226317+00 |
| updated_at | 2026-01-25 21:42:56.089608+00 |
| description | Content module for systemprompt.io with content management, analytics, and event tracking |
| homepage | https://systemprompt.io |
| repository | https://github.com/systempromptio/systemprompt-core |
| max_upload_size | |
| id | 2059972 |
| size | 247,773 |
Content module for systemprompt.io with content management, analytics, and event tracking.
Part of the Domain layer in the systemprompt.io architecture.
This crate handles all content-related functionality:
src/
├── api/
│ ├── mod.rs # Router exports
│ └── routes/
│ ├── mod.rs # Route composition
│ ├── blog.rs # Content handlers (list, get by slug)
│ ├── query.rs # Search handler
│ └── links/
│ ├── mod.rs # Link route exports
│ ├── handlers.rs # Link CRUD + redirect handlers
│ └── types.rs # Request/response types
├── config/
│ ├── mod.rs # Config exports
│ ├── validated.rs # ContentConfigValidated (validation logic)
│ └── ready.rs # ContentReady (loaded content cache)
├── jobs/
│ ├── mod.rs # Job exports
│ └── content_ingestion.rs # ContentIngestionJob (implements Job trait)
├── models/
│ ├── mod.rs # Model exports
│ ├── builders/
│ │ ├── mod.rs # Builder exports
│ │ ├── content.rs # CreateContentParams, UpdateContentParams
│ │ └── link.rs # CreateLinkParams, RecordClickParams, TrackClickParams
│ ├── content.rs # Content, ContentMetadata, IngestionReport
│ ├── content_error.rs # ContentError (validation errors)
│ ├── link.rs # CampaignLink, LinkClick, LinkPerformance
│ ├── paper.rs # PaperMetadata, PaperSection
│ └── search.rs # SearchRequest, SearchResponse, SearchResult
├── repository/
│ ├── mod.rs # Repository exports
│ ├── content/
│ │ ├── mod.rs # ContentRepository
│ │ ├── queries.rs # Read operations (get, list)
│ │ └── mutations.rs # Write operations (create, update, delete)
│ ├── link/
│ │ ├── mod.rs # LinkRepository
│ │ └── analytics.rs # LinkAnalyticsRepository
│ └── search/
│ └── mod.rs # SearchRepository
├── services/
│ ├── mod.rs # Service exports
│ ├── content.rs # ContentService
│ ├── content_provider.rs # DefaultContentProvider (implements ContentProvider)
│ ├── ingestion/
│ │ ├── mod.rs # IngestionService
│ │ ├── parser.rs # Paper chapter loading, frontmatter validation
│ │ └── scanner.rs # Directory scanning, file validation
│ ├── link/
│ │ ├── mod.rs # Link service exports
│ │ ├── analytics.rs # LinkAnalyticsService
│ │ └── generation.rs # LinkGenerationService
│ ├── search/
│ │ └── mod.rs # SearchService
│ └── validation/
│ └── mod.rs # Content and paper metadata validation
├── error.rs # ContentError enum (thiserror)
└── lib.rs # Crate root with public exports
HTTP route handlers for content retrieval, search queries, and link management. Routes delegate to services, never directly to repositories.
Content source configuration validation and caching. ContentConfigValidated validates YAML configuration, ContentReady loads and caches parsed content for fast access.
Background jobs for content processing. ContentIngestionJob scans configured directories and syncs markdown content to the database.
Domain types for content, links, and search. Builder pattern used for complex parameter types (CreateContentParams, TrackClickParams).
Database access layer using SQLX macros for compile-time SQL verification. Repositories handle data persistence with no business logic. Split into queries.rs (reads) and mutations.rs (writes) for clarity.
Business logic layer. Services coordinate repositories and implement domain operations:
ContentService: Content retrieval by source and slugIngestionService: Directory scanning and content parsingSearchService: Category and keyword searchLinkGenerationService: Campaign link creation with UTM parametersLinkAnalyticsService: Click tracking and performance metricsInternal (shared/):
systemprompt-models - Cross-crate model typessystemprompt-identifiers - Typed IDs (ContentId, LinkId, etc.)systemprompt-traits - ContentProvider, Job traitssystemprompt-provider-contracts - Job registration macrosInternal (infra/):
systemprompt-database - Database pool abstractionsystemprompt-logging - Logging infrastructuresystemprompt-config - Configuration managementuse systemprompt_content::{
// Models
Content, ContentMetadata, IngestionOptions, IngestionReport,
IngestionSource, SearchFilters, SearchRequest, SearchResponse,
SearchResult, UpdateContentParams,
// Repositories
ContentRepository, LinkAnalyticsRepository, SearchRepository,
// Services
DefaultContentProvider, IngestionService, LinkAnalyticsService, SearchService,
// Jobs
ContentIngestionJob,
// Config
ContentConfigValidated, ContentReady, ContentSourceConfigValidated,
LoadStats, ParsedContent, ValidationResult,
// API
router, get_content_handler, list_content_by_source_handler, query_handler,
// Error
ContentError,
// Validation
validate_content_metadata, validate_paper_metadata,
validate_paper_section_ids_unique,
};
ContentProvider (systemprompt-traits) - DefaultContentProviderJob (systemprompt-traits) - ContentIngestionJobContentRouting (systemprompt-models) - ContentConfigValidated, ContentReadyAdd to your Cargo.toml:
[dependencies]
systemprompt-content = "0.0.1"
FSL-1.1-ALv2 - See LICENSE for details.