Many people call vutuv the LinkedIn of the Fediverse: a free, fast and open source social network for the profiles of humans and organizations. It began as a LinkedIn alternative and picked up the good parts of X and Facebook along the way: posts, likes, reposts, replies and direct messages. And it federates, so members can be followed from Mastodon and the rest of the Fediverse (ActivityPub, opt-in per member). The reference installation runs at vutuv.de; anyone can run their own — on the public internet or inside a company or organization intranet.
We use the MIT License.
-
Private Fediverse messages under your posts support private text replies (up to 5,000 characters), sent only to the original sender. Saved answers appear beneath the original message in the sender’s feed and thread, and on the reply page. Only the sender can see them on vutuv. Attachments and editing are not supported yet. Outgoing private messages use separate storage with optional post and parent references, ready for messages that start a conversation; the current UI supports replies only.
-
A public post's beta reach analysis is public too, uses cached NodeInfo to show community size when available, and is available from its three-dot menu. It shows the distinct people with visible interactions, a shareable server-network card, cached follower totals for potential repost reach, and three-hour interaction momentum over 7 or 30 days (daily over one year). Potential repost reach leads the analysis, immediately followed by the server network. Its larger server graph numbers visible interactions, uses radial labels, and arranges first reactions as a time spiral without claiming unobservable repost hops. Chart periods count back from the present and are labelled accordingly. Shared analysis links use potential repost reach as their OpenGraph hero. A separate note explains that the true Fediverse reach cannot be measured. Empty chart tails stop two days after the last visible interaction, while a later wave remains visible. Visible interactions are clearly separated from view counts.
-
Public member profiles (work experience, education, spoken languages, tags, links, contact details, online messengers with click-to-chat deep links) with follow relationships, posts, likes/reposts/replies and 1:1 direct messages — all real-time (Phoenix LiveView) where it matters. Members can also follow a tag to pull its posts into their feed, interact with posts found through that tag (fetched only when they choose an action), and get matching people suggested. Adding a new CV entry (job, education, certificate) can optionally notify your followers — your call per entry, in-app only, and switchable off by whoever receives it. A post can be a book or film review: attach an ISBN (or IMDb link) plus title, author or director, year and how you consumed it (print / e-book / audiobook, cinema / streaming / disc), and the post shows a review card with the fetched book cover and a shop or IMDb link. Developer profiles can show cached public stats of their GitHub, GitLab and Codeberg accounts (stars, repositories, languages, activity).
-
Verified organization pages at
/organizations(a company, a Verein, a public body, a university, an NGO — not only companies, each tagged with its kind): a page can only exist once its claimant proves control of the organization's web domain (a DNS TXT record or a well-known file), so there are no fake or typo'd organization entries. Each page is run by a team (owner / admin / recruiter roles), can prove several domains, and is findable under alternative names and brands. -
A job board at
/jobs: members and verified organizations post openings (90-day lifecycle, salary ranges, on-site / hybrid / remote, offline radius search by city or zip). Both sides can save a search and be e-mailed when a new match appears — a candidate for jobs, a recruiter for people open to offers — without a member's private salary expectation ever riding along. -
Passwordless: login by emailed PIN, optionally passkeys (WebAuthn), an authenticator app (TOTP) or a printed one-time code list. Every security-relevant change is kept in an account-activity log the member can read themselves: what changed, to the second, from which device, and how it was confirmed.
-
Invite non-members by email: the link opens the sign-up form prefilled, with an optional personal note and opt-in auto-follow.
-
Agent-ready: every public page is also served as Markdown, plain text, JSON and XML; RSS feeds, sitemap, JSON-LD,
/llms.txtand a REST API (/api/2.0, OAuth 2 + personal access tokens, webhooks). -
Built-in moderation (family-friendly by design), admin panel, newsletter system, GDPR data export, a formatted CV (Lebenslauf) download for job applications (print/PDF, Word, OpenDocument, LaTeX, JSON Resume), and per-installation legal pages (Impressum, Datenschutzerklärung, Nutzungsbedingungen) edited at
/admin/legal. -
AI image moderation: every uploaded picture (and every auto-generated link screenshot) is checked by a local Ollama vision model before anyone but the uploader sees it — unsafe images are deleted on the spot and the owner notified. Runs fully offline; installations without Ollama can turn it off.
-
German and English UI; dark mode follows the system.
Technology: Elixir / Phoenix 1.8, PostgreSQL, Bandit, Tailwind CSS v4, libvips (AVIF images). A single modest server goes a long way (vutuv.de has yet to outgrow one), and because vutuv is built on Elixir it scales out to multiple nodes for very large installations.
The operator's manual — requirements, release build, configuration reference, nginx, first admin, legal pages, intranet setups, backups and upgrades — lives in docs/ADMINS.md.
We'd love to hear about your installation. If you run vutuv (intranet or internet), tell us — and send feedback, bug reports and feature requests — via GitHub issues.
mise install # Erlang + Elixir + Node (pinned in .tool-versions)
mix setup # deps, database, assets
mix phx.server # http://localhost:4000The developer guide (prerequisites, setup, tests, how vutuv.de itself is deployed) lives in docs/DEVELOPERS.md; the architecture is documented one subsystem per file in docs/architecture/. Ground rules for contributions: CONTRIBUTING.md.
Third-party REST/JSON API at /api/2.0 (Bearer tokens). Create a personal
access token at /access_tokens, then:
curl -H "Authorization: Bearer vutuv_pat_YOUR_TOKEN" https://vutuv.de/api/2.0/meFull developer documentation is served at
/developers (sources:
priv/dev_docs/).
The Mastodon-compatible API serves public account profiles, posts, post contexts and booster lists without a token. Private data and write actions still require OAuth.