{"id":13433427,"url":"https://github.com/techno-tim/littlelink-server","last_synced_at":"2025-05-14T18:05:38.887Z","repository":{"id":37027756,"uuid":"394506487","full_name":"techno-tim/littlelink-server","owner":"techno-tim","description":"A lightweight, open source, stateless, and self-hosted alternative to linktree in a Docker container!","archived":false,"fork":false,"pushed_at":"2025-04-29T02:25:29.000Z","size":4037,"stargazers_count":996,"open_issues_count":21,"forks_count":172,"subscribers_count":13,"default_branch":"master","last_synced_at":"2025-04-29T03:39:06.254Z","etag":null,"topics":["docker","express","javascript","link","linktree","node","nodejs","react","reactjs","tree"],"latest_commit_sha":null,"homepage":"https://links.technotim.live","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/techno-tim.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null},"funding":{"github":"timothystewart6","patreon":"technotim"}},"created_at":"2021-08-10T02:53:44.000Z","updated_at":"2025-04-29T02:25:31.000Z","dependencies_parsed_at":"2023-10-25T05:25:00.342Z","dependency_job_id":"83c016be-dd31-48bd-a245-2b22c8af0b83","html_url":"https://github.com/techno-tim/littlelink-server","commit_stats":{"total_commits":687,"total_committers":37,"mean_commits":18.56756756756757,"dds":"0.44104803493449785","last_synced_commit":"549237036fce51d57725422b699dd03b63e793ae"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/techno-tim%2Flittlelink-server","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/techno-tim%2Flittlelink-server/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/techno-tim%2Flittlelink-server/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/techno-tim%2Flittlelink-server/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/techno-tim","download_url":"https://codeload.github.com/techno-tim/littlelink-server/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254198514,"owners_count":22030965,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["docker","express","javascript","link","linktree","node","nodejs","react","reactjs","tree"],"created_at":"2024-07-31T02:01:25.644Z","updated_at":"2025-05-14T18:05:33.865Z","avatar_url":"https://github.com/techno-tim.png","language":"JavaScript","readme":"# 🔗 LittleLink-Server\n\nLittleLink is a lightweight DIY alternative to services like [Linktree](https://linktr.ee)\nand [many.link](https://many.link/).\n\nInspired by [littlelink](https://github.com/sethcottle/littlelink).\n\n ![image](https://user-images.githubusercontent.com/1322205/174909247-2515ab5c-fd39-475d-b5dc-9c0a1ea20d6e.png)\n\n## 👇 What is LittleLink-Server?\n\nLittleLink-Server is based on the great work from [littlelink](https://github.com/sethcottle/littlelink), a lightweight DIY alternative to services like [Linktree](https://linktr.ee) and [many.link](https://many.link/). LittleLink and LittleLink-Server is built using [Skeleton](http://getskeleton.com/), a dead simple, responsive boilerplate—we just stripped out some additional code you wouldn't need and added in branded styles for popular services. 😊\n\nIt takes the same simple approach to a link page and hosts it within a NodeJS server with React Server Side Rendering, containerized for you to use. Now, customizing `LittleLink` with `littlelink-server` is as easy as passing in some environment variables. If you need help configuring this, please see this [video](https://youtu.be/42SqfI_AjXU) at explains everything and a live example at [links.technotim.live](https://links.technotim.live/).\n\n## ⭐ Features\n\n- Over 60+ brand buttons with more able to be requested\n- Customisable Themes\n- Analytics Support\n- Health Check Support\n- A fully customisable docker-compose \n\n## 🚀 Getting Started\n\nCheck the [docker-compose.yml](/docker-compose.yml) file for all supported buttons and configuration!\n\nThe example below will generate a site exactly like \u003chttps://links.technotim.live\u003e\n\n### Using Docker-Compose\n\n```yml\nversion: \"3.0\"\nservices:\n  littlelink-server:\n    image: ghcr.io/techno-tim/littlelink-server:latest\n    # dockerhub is also supported timothystewart6/littlelink-server\n    # image: timothystewart6/littlelink-server:latest\n    container_name: littlelink-server\n    environment:\n      - META_TITLE=Techno Tim\n      - META_DESCRIPTION=Software Engineer | Gamer | Twitch Streamer | Content Creator on YouTube | Homelab | 🇺🇸 🇯🇵  | Full Nerd\n      - META_AUTHOR=Techno Tim\n      - META_KEYWORDS=HomeLab, HTML, CSS, Engineering\n      - LANG=en\n      - META_INDEX_STATUS=all\n      - OG_SITE_NAME=Techno Tim\n      - OG_TITLE=Techno Tim\n      - OG_DESCRIPTION=The home of Techno Tim\n      - OG_URL=https://technotim.live\n      - OG_IMAGE=https://pbs.twimg.com/profile_images/1286144221217316864/qIAsKOpB_400x400.jpg\n      - OG_IMAGE_WIDTH=400\n      - OG_IMAGE_HEIGHT=400\n      - GA_TRACKING_ID=G-XXXXXXXXXX\n      - THEME=Dark\n      - FAVICON_URL=https://pbs.twimg.com/profile_images/1286144221217316864/qIAsKOpB_200x200.jpg\n      - AVATAR_URL=https://pbs.twimg.com/profile_images/1286144221217316864/qIAsKOpB_200x200.jpg\n      - AVATAR_2X_URL=https://pbs.twimg.com/profile_images/1286144221217316864/qIAsKOpB_400x400.jpg\n      - AVATAR_ALT=Techno Tim Profile Pic\n      - NAME=TechnoTim\n      - BIO=Software Engineer | Gamer | Twitch Streamer | Content Creator on YouTube | Homelab | 🇺🇸 🇯🇵 | Full Nerd\n      # use ENV variable names for order, listed buttons will be boosted to the top\n      - BUTTON_ORDER=YOUTUBE,TWITCH,TWITTER,GITHUB,INSTAGRAM,LINKED_IN,DISCORD,FACEBOOK,TIKTOK,PATREON,GEAR,DOCUMENTATION\n      # you can render an unlimited amount of custom buttons by adding \n      # the CUSTOM_BUTTON_* variables and by using a comma as a separator.\n      - CUSTOM_BUTTON_TEXT=Documentation,Recommended Gear\n      - CUSTOM_BUTTON_URL=https://l.technotim.live/docs,https://l.technotim.live/gear\n      - CUSTOM_BUTTON_COLOR=#000000,#000000\n      - CUSTOM_BUTTON_TEXT_COLOR=#ffffff,#ffffff\n      - CUSTOM_BUTTON_ALT_TEXT=Tech documentation site for my videos and more,Recommended Gear\n      - CUSTOM_BUTTON_NAME=DOCUMENTATION,GEAR\n      - CUSTOM_BUTTON_ICON=fas file-alt,fas fa-cog\n      - GITHUB=https://l.technotim.live/github\n      - TWITTER=https://l.technotim.live/twitter\n      - INSTAGRAM=https://l.technotim.live/instagram\n      - LINKED_IN=https://l.technotim.live/linkedin\n      - YOUTUBE=https://l.technotim.live/subscribe\n      - TWITCH=https://l.technotim.live/twitch\n      - DISCORD=https://l.technotim.live/discord\n      - TIKTOK=https://l.technotim.live/tiktok\n      - FACEBOOK=https://l.technotim.live/facebook\n      - PATREON=https://l.technotim.live/patreon\n      - FOOTER=Techno Tim © 2022\n    ports:\n      - 8080:3000\n    restart: unless-stopped\n    security_opt:\n      - no-new-privileges:true\n```\n\n### Using Docker \n\n```bash\ndocker run -d \\\n  --name=littlelink-server \\\n  -p 8080:3000 \\\n  -e META_TITLE='Techno Tim' \\\n  -e META_DESCRIPTION='Techno Tim Link page' \\\n  -e META_AUTHOR='Techno Tim' \\\n  -e META_KEYWORDS='HomeLab, HTML, CSS, Engineering' \\\n  -e LANG=en \\\n  -e META_INDEX_STATUS='noindex' \\\n  -e THEME='Dark' \\\n  -e FAVICON_URL='https://pbs.twimg.com/profile_images/1286144221217316864/qIAsKOpB_200x200.jpg' \\\n  -e AVATAR_URL='https://pbs.twimg.com/profile_images/1286144221217316864/qIAsKOpB_200x200.jpg' \\\n  -e AVATAR_2X_URL='https://pbs.twimg.com/profile_images/1286144221217316864/qIAsKOpB_400x400.jpg' \\\n  -e AVATAR_ALT='Techno Tim Profile Pic' \\\n  -e NAME='TechnoTim' \\\n  -e BIO='Software Engineer | Gamer | Twitch Streamer | Content Creator on YouTube | Homelab | 🇺🇸 🇯🇵 | Full Nerd' \\\n  -e GITHUB='https://l.technotim.live/github' \\\n  -e TWITTER='https://l.technotim.live/twitter' \\\n  -e INSTAGRAM='https://www.instagram.com/techno.tim' \\\n  -e LINKED_IN='https://l.technotim.live/linkedin' \\\n  -e YOUTUBE='https://l.technotim.live/subscribe' \\\n  -e TWITCH='https://l.technotim.live/twitch' \\\n  -e DISCORD='https://l.technotim.live/discord' \\\n  -e TIKTOK='https://l.technotim.live/discord' \\\n  -e KIT='https://l.technotim.live/gear' \\\n  -e FOOTER=Techno Tim © 2022 \\\n  --restart unless-stopped \\\n  ghcr.io/techno-tim/littlelink-server:latest\n```\n\n### Using Kubernetes\n\n[Unofficial helm chart provided by k8s-at-home](https://github.com/k8s-at-home/charts/tree/master/charts/stable/littlelink-server)\n\n```bash\nhelm repo add k8s-at-home https://k8s-at-home.com/charts/\nhelm repo update\nhelm install littlelink-server \\\n  --set env.TZ=\"America/New York\" \\\n  --set env.META_TITLE=\"TechnoTim\"\n    k8s-at-home/littlelink-server\n```\n\nOr use a values.yaml files\n\n`helm install littlelink-server k8s-at-home/littlelink-server -f values.yaml`\n\n## 🔧 Configuration\n\n### Analytics Support\n\n#### Google Analytics\n\nSee [Getting Started with Analytics](https://support.google.com/analytics/answer/1008015?hl=en). After getting your GA Tracking Id, use your tracking Id as environment variable like `GA_TRACKING_ID=G-XXXXXXXXXX`  (See the example below)\n\nAll buttons clicked will be tracked automatically if `GA_TRACKING_ID` exists.\n\nSample event for YouTube button.\n\n```javascript\n  window.gtag('event', 'youtube-button');\n```\n\n#### Umami\n\nSee [Adding a website \u0026 Collecting data](https://umami.is/docs/collect-data) page to add and generate your tracking code.\n\nGenerated tracking code should look like:\n\n```javascript\n\u003cscript async defer data-website-id=\"00000000-1111-2222-3333-444444444444\" src=\"https://your-umami-app.com/umami.js\"\u003e\u003c/script\u003e\n```\n\nUse `data-website-id` as environment variable `UMAMI_WEBSITE_ID`. Take the initial root host of `src` as `UMAMI_APP_URL`, and the name of the script (i.e. `umami.js` or `script.js`) as `UMAMI_SCRIPT_NAME`.\n\nSample event for YouTube button.\n\n```javascript\n  window.umami.track('youtube-button');\n```\n\n#### Matomo \n\nSee [Installing Matomo fo how to configure analytics](https://matomo.org/docs/installation/) and [how to find your site id](https://matomo.org/faq/general/faq_19212/)\n\nUse `MATOMO_URL` for your URL and `MATOMO_SITE_ID` for your site id\n\nSample event for YouTube button.\n\n```javascript\n  window._paq.push(['trackEvent', 'youtube-button']]);\n```\n\n### Health Check\n\nA health check endpoint exists on `/healthcheck`.  If healthy, it will return with a `200` and the following response:\n\n```json\n{\n  \"status\": \"ok\"\n}\n```\n\nTo skip express from logging these calls, add the environment variable:\n\n```bash\nSKIP_HEALTH_CHECK_LOGS=true\n``` \n  \n\n","funding_links":["https://github.com/sponsors/timothystewart6","https://patreon.com/technotim"],"categories":["JavaScript","Apps"],"sub_categories":["Tools"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftechno-tim%2Flittlelink-server","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftechno-tim%2Flittlelink-server","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftechno-tim%2Flittlelink-server/lists"}