selfhost.directory

The index of self-hostable projects — ranked, categorized and served with live updates.
Own your data and stop giving it to big tech.

AIHOT logo

Self-host AIHOT

AI-curated news site engine that writes its own dailies

BetaOpen SourceMIT
Docker ComposeCompose file & guide
docker compose up -d --build
Updatedlast week
LanguageTypescript
Setup difficultyModerate
ThemeDark mode
Stars
8 786
CPU
2 cores (recommended for cloud server)
RAM
4 GB (recommended for cloud server)
Port
3000 (Web frontend (SSR site and admin); compose maps ${PORT:-3000}:3000)
Requires
PostgreSQL

What is AIHOT?

Should you self-host AIHOT?

AIHOT scores 64/100 on selfhost.directory (how scoring works) and ranks #1 of 3 in News Aggregators. It has 8 786 GitHub stars.

There was no stable release in the past 12 months, so check the repository's recent activity before you rely on it.

Setup is moderate: expect some configuration beyond a single command. It is MIT-licensed and written mostly in Typescript.

Its closest alternative on selfhost.directory is Libreddit (56/100, 5 198 stars). AIHOT scores higher overall. See AIHOT vs Libreddit side by side.

Features

  • Admin backend
  • Agent-facing outputs (MCP, RSS, API, llms.txt)
  • AI writing and translation
  • Automatic database backups
  • Bookmarks and local reading settings
  • Daily/weekly/monthly digests
  • Event clustering
  • External ingest endpoint
  • Heat/trending ranking
  • LLM prefilter and dual scoring
  • Multi-type source ingestion
  • Per-industry customization files
  • Search
  • Topic pages

AIHOT README

How to install AIHOT

Install AIHOT with Docker Compose

git clone https://github.com/KKKKhazix/AIHOT.git myhot
cd myhot
node scripts/init-env.ts --llm-key <你的模型 API Key>
docker compose up -d --build

Opens at http://localhost:3000, admin at /admin. HTTPS via `docker compose --profile https up -d --build` (Caddy).

How to configure AIHOT

  • ADMIN_EMAILSEmails allowed to log into the admin.

    Emails allowed to log into the admin.

  • ADMIN_FEISHU_UNION_IDSFeishu union IDs allowed to log into the admin.

    Feishu union IDs allowed to log into the admin.

  • ADMIN_PASSWORDAdmin password (at least 12 characters) to log in to /admin.

    Admin password (at least 12 characters) to log in to /admin.

  • AIHOT_CREDENTIALS_DIRDirectory with grouped secret files to use instead of inline values.

    Directory with grouped secret files to use instead of inline values.

  • AIHOT_DATA_DIRDirectory for uploads, image cache and local backups.

    Directory for uploads, image cache and local backups.

  • AIHOT_ENVIRONMENTEnvironment name; defaults to production or development from NODE_ENV.

    Environment name; defaults to production or development from NODE_ENV.

  • AIHOT_RELEASERelease name shown in the admin run page and /api/health.

    Release name shown in the admin run page and /api/health.

  • ALERT_QUIET_MINUTES360Minutes without new content before the site is considered stalled and alerts fire.

    Minutes without new content before the site is considered stalled and alerts fire.

  • ALLOW_PRIVATE_NETWORK_FETCHAllow fetching private-network addresses during local debugging (refused in production).

    Allow fetching private-network addresses during local debugging (refused in production).

    values: true

  • API_BASE_URLhttp://127.0.0.1:3001Internal API base URL for the web process (without Docker).

    Internal API base URL for the web process (without Docker).

  • COLLECT_ENABLEDtrueSafety valve: only true collects sources (including daily source icons); anything else stops collection.

    Safety valve: only true collects sources (including daily source icons); anything else stops collection.

    values: true

  • DAJIALA_KEYPaid key for collecting WeChat public accounts via Dajiala.

    Paid key for collecting WeChat public accounts via Dajiala.

  • DASHSCOPE_API_KEYAlibaba Bailian/DashScope key; also used for embeddings (text-embedding-v4) when set.

    Alibaba Bailian/DashScope key; also used for embeddings (text-embedding-v4) when set.

  • DASHSCOPE_BASE_URLhttps://dashscope.aliyuncs.com/compatible-mode/v1Base URL for Qwen (DashScope compatible-mode) presets.

    Base URL for Qwen (DashScope compatible-mode) presets.

  • DATABASE_POOL_MAX10Database connection pool cap.

    Database connection pool cap.

  • DATABASE_URLDatabase URL, needed only when running without Docker.

    Database URL, needed only when running without Docker.

  • DB_BACKUP_STORE_BUCKETBucket name for database backups.

    Bucket name for database backups.

  • DB_BACKUP_STORE_DOMAINAccess domain (including bucket name) for non-Tencent-COS S3-compatible stores.

    Access domain (including bucket name) for non-Tencent-COS S3-compatible stores.

  • DB_BACKUP_STORE_REGIONRegion for the backup store.

    Region for the backup store.

  • DB_BACKUP_STORE_SECRET_IDCredential secret ID for the S3-compatible daily database backup store.

    Credential secret ID for the S3-compatible daily database backup store.

  • DB_BACKUP_STORE_SECRET_KEYCredential secret key for the backup store.

    Credential secret key for the backup store.

  • DEEPSEEK_API_KEYAPI key for DeepSeek presets.

    API key for DeepSeek presets.

  • DEEPSEEK_BASE_URLhttps://api.deepseek.com/v1Base URL for DeepSeek presets.

    Base URL for DeepSeek presets.

  • DEV_AUTH_DISPLAY_NAMEDev AdminDisplay name shown in the admin for dev login.

    Display name shown in the admin for dev login.

  • DEV_AUTH_ROLEadminDevelopment-only admin role that skips login (refused in production).

    Development-only admin role that skips login (refused in production).

    values: admin

  • DIGEST_MODELOverride the model used for event digests.

    Override the model used for event digests.

    values: preset model names

  • EGRESS_PROXY_URLEgress proxy URL used when fetching overseas sources (not model calls).

    Egress proxy URL used when fetching overseas sources (not model calls).

  • EMBEDDING_API_KEYAPI key for the embeddings service.

    API key for the embeddings service.

  • EMBEDDING_BASE_URLBase URL of an OpenAI-compatible /embeddings endpoint for event-recall vectors.

    Base URL of an OpenAI-compatible /embeddings endpoint for event-recall vectors.

  • EMBEDDING_DIMSVector dimensions; recomputes old vectors when changed.

    Vector dimensions; recomputes old vectors when changed.

  • EMBEDDING_MODELEmbedding model name.

    Embedding model name.

  • FEISHU_ALERT_CHAT_IDFeishu chat ID for alerts.

    Feishu chat ID for alerts.

  • FEISHU_APP_IDFeishu self-built app ID for internal notifications.

    Feishu self-built app ID for internal notifications.

  • FEISHU_APP_SECRETFeishu self-built app secret.

    Feishu self-built app secret.

  • FEISHU_CONTENT_PUSH_ENABLEDfalseEnable pushing selected items (T1/T1_5 sources) to a Feishu group.

    Enable pushing selected items (T1/T1_5 sources) to a Feishu group.

    values: true

  • FEISHU_INTERNAL_CHAT_IDFeishu chat ID for internal messages.

    Feishu chat ID for internal messages.

  • FEISHU_INTERNAL_ENABLEDfalseEnable alerts and feedback forwarding to internal Feishu groups.

    Enable alerts and feedback forwarding to internal Feishu groups.

    values: true

  • FEISHU_LOGIN_APP_IDFeishu app ID for logging into the admin with a Feishu account.

    Feishu app ID for logging into the admin with a Feishu account.

  • FEISHU_LOGIN_APP_SECRETFeishu app secret for admin login.

    Feishu app secret for admin login.

  • FEISHU_PUSH_MIRROR_WEBHOOK_URLMirror Feishu webhook URL for content pushes.

    Mirror Feishu webhook URL for content pushes.

  • FEISHU_PUSH_WEBHOOK_URLFeishu webhook URL for content pushes.

    Feishu webhook URL for content pushes.

  • GITHUB_TOKENGitHub API token that raises the quota for JSON sources reading api.github.com.

    GitHub API token that raises the quota for JSON sources reading api.github.com.

  • GROUP_MODELOverride the model used for event grouping.

    Override the model used for event grouping.

    values: preset model names

  • GROUP_REVIEW_MODELOverride the model used for the merge review before writing.

    Override the model used for the merge review before writing.

    values: preset model names

  • IMG_PROXY_SIGN_SECRETSecret for signing the image proxy.

    Secret for signing the image proxy.

  • IMGPROXY_UPSTREAM_GB_PER_DAY30Per-day GB cap for the image proxy fetching from origin sites.

    Per-day GB cap for the image proxy fetching from origin sites.

  • IMGPROXY_UPSTREAM_MB_PER_MINUTE300Per-minute MB cap for the image proxy fetching from origin sites.

    Per-minute MB cap for the image proxy fetching from origin sites.

  • INDEXNOW_KEY32-hex-digit IndexNow key.

    32-hex-digit IndexNow key.

  • INDEXNOW_SUBMIT_ENABLEDfalseSubmit new pages to IndexNow daily.

    Submit new pages to IndexNow daily.

    values: true

  • INGEST_RATE_LIMIT10Max pushes per client per minute on the ingest endpoint; 0 turns it off.

    Max pushes per client per minute on the ingest endpoint; 0 turns it off.

  • INGEST_TOKENToken (16+ chars) for external scripts pushing content to POST /api/ingest/items; unset disables the endpoint.

    Token (16+ chars) for external scripts pushing content to POST /api/ingest/items; unset disables the endpoint.

  • JINA_API_KEYJina Reader key as browser-rendering fallback when full text cannot be fetched.

    Jina Reader key as browser-rendering fallback when full text cannot be fetched.

  • LLM_API_KEYAPI key for the model service.

    API key for the model service.

  • LLM_BASE_URLhttps://api.deepseek.com/v1Base URL of any OpenAI-compatible model API; all steps use it by default.

    Base URL of any OpenAI-compatible model API; all steps use it by default.

  • LLM_EXTRA_JSONProvider-specific request parameters (JSON), e.g. turning thinking mode off.

    Provider-specific request parameters (JSON), e.g. turning thinking mode off.

  • LLM_JSON_MODETurn off if the provider does not support JSON mode (response_format).

    Turn off if the provider does not support JSON mode (response_format).

    values: false

  • LLM_MODELdeepseek-flashModel used by all steps by default.

    Model used by all steps by default.

  • LLM_REASONING_TOKENSExtra output budget reserved for reasoning when using reasoning models.

    Extra output budget reserved for reasoning when using reasoning models.

  • LLM_VISIONEnable vision so selection headlines/summaries can consider the lead image.

    Enable vision so selection headlines/summaries can consider the lead image.

    values: true

  • LOG_LEVELinfoLog level.

    Log level.

  • MCP_ALLOWED_HOSTSExtra comma-separated hosts accepted by MCP besides the SITE_URL host and localhost.

    Extra comma-separated hosts accepted by MCP besides the SITE_URL host and localhost.

  • MODEL_CALLS_ENABLEDtrueSafety valve: only true allows model calls.

    Safety valve: only true allows model calls.

    values: true

  • PORT3000Port the site opens on the host in docker compose (default 3000, all interfaces); with HTTPS bind it to 127.0.0.1:3000 for Caddy only.

    Port the site opens on the host in docker compose (default 3000, all interfaces); with HTTPS bind it to 127.0.0.1:3000 for Caddy only.

  • POSTGRES_PASSWORDDatabase password when using Docker.

    Database password when using Docker.

  • PREFILTER_MODELOverride the model used by the prefilter step.

    Override the model used by the prefilter step.

    values: preset model names

  • PRIVATE_FEED_HOSTSComma-separated full hostnames of self-hosted internal feed services allowed for source URLs.

    Comma-separated full hostnames of self-hosted internal feed services allowed for source URLs.

  • REPORT_MODELOverride the model used for report writing.

    Override the model used for report writing.

    values: preset model names

  • SCORE_MODELOverride the model used for selection scoring.

    Override the model used for selection scoring.

    values: preset model names

  • SESSION_SECRETSecret for signing sessions.

    Secret for signing sessions.

  • SITE_DOMAINDomain used for automatic HTTPS through Caddy with the https profile.

    Domain used for automatic HTTPS through Caddy with the https profile.

  • SITE_URLhttp://localhost:3000Public site URL used for generated links, RSS, share images and MCP.

    Public site URL used for generated links, RSS, share images and MCP.

  • SOCIALDATA_API_KEYPaid key for collecting X (Twitter) accounts via SocialData.

    Paid key for collecting X (Twitter) accounts via SocialData.

  • STRUCTURE_MODELOverride the model used for structuring (category/tags/facts).

    Override the model used for structuring (category/tags/facts).

    values: preset model names

  • SUMMARIZE_MODELOverride the model used for short summaries.

    Override the model used for short summaries.

    values: preset model names

  • TRANSLATE_MODELOverride the model used for translation.

    Override the model used for translation.

    values: preset model names

  • TRUST_PROXYfalseRead visitor IPs from the reverse proxy's X-Forwarded-For header.

    Read visitor IPs from the reverse proxy's X-Forwarded-For header.

    values: true|false

  • UNDERSTAND_MODELOverride the model used for content understanding/writing.

    Override the model used for content understanding/writing.

    values: preset model names

  • WORDING_MODELOverride the model used for the wording-fix step.

    Override the model used for the wording-fix step.

    values: preset model names

  • XIAOMI_MIMO_API_KEYAPI key for Xiaomi MiMo presets.

    API key for Xiaomi MiMo presets.

  • XIAOMI_MIMO_BASE_URLhttps://api.xiaomimimo.com/v1Base URL for Xiaomi MiMo presets.

    Base URL for Xiaomi MiMo presets.

  • ZHIPU_API_KEYAPI key for Zhipu presets.

    API key for Zhipu presets.

  • ZHIPU_BASE_URLhttps://open.bigmodel.cn/api/paas/v4Base URL for Zhipu presets.

    Base URL for Zhipu presets.

More in News Aggregators

Rate this project

Click to rate — no account needed.

0 comments

Posting as guest
Loading comments…