Panoptikum (or short Pan) is a webapplication written in Phoenix that represents a podcast discovery and community website.
It is licensed under the AGPL license. The project website with more information on the project can be found at https://www.panoptikum.social If you are interested and want to get in touch, write an email to Stefan.
- Make sure you have Elixir installed.
- Make sure you have Node.js installed.
- Make sure you have PostgreSQL installed and running.
- Make sure you have ManticoreSearch installed and running.
- Install Elixir's dependencies with
mix deps.get - Install Node.js dependencies with
npm installinside the assets folder
- Dev works out of the box with no configuration —
config/runtime.exsfalls back to sensible local defaults (Postgrespostgres/postgres, databasepan_dev) if you don't set any env vars. Only setPAN_DB_USERNAME/PAN_DB_PASSWORD/PAN_DB_DATABASE/PAN_DB_HOSTNAMEif your local Postgres needs different credentials.
- Setup your database with
mix ecto.setup - Import demo data
- Uncompress
materials/pan_dev.sql.gz - Import data with
psql pan_dev < pan_dev.sqlinside the materials folder - The dump already includes an admin user, username
adminand passwordchangeme— no seeding step needed (priv/repo/seeds.exsis currently just an empty template)
- Uncompress
- Start Phoenix endpoint with
mix phx.server - Now you can visit
localhost:4000from your browser. - Login as Admin using username
adminand passwordchangeme
- Run tests with
mix test
To stand up a disposable QA deployment on a separate server via Docker Compose, see DOCKER.md.
- Sending a Test Mail from the console
Pan.Email.login_link_html_email("mytoken", "my-email@example.com") |> Pan.Mailer.deliver() - To rebuild the search index login as
adminand visitlocalhost:4000/admin/search/reset_all - To attach to a server session:
/var/phoenix/pan/bin/pan remoteand then, for examplePanWeb.Podcast.get_deprecated(10)to probe deprecated podcasts and get delete/unretire recommendations
Panoptikum is only possible because of an enormous amount of open-source work by others. Thank you.
- Elixir & Erlang/OTP
- Phoenix — web framework
- Ecto & Postgrex — database layer
- PostgreSQL — database
- Phoenix LiveView
- Bandit — web server
- Manticore Search — full text search
- Quinn — XML parsing for feed import
- HTTPoison — HTTP client
- Timex & tzdata — date and time handling
- HtmlSanitizeEx — sanitizing feed HTML
- Floki — HTML parsing
- MDEx — Markdown rendering
- Swoosh & gen_smtp — mailing
- bcrypt_elixir — password hashing
- ja_serializer — JSON:API serialization
- Mogrify & ImageMagick — image processing
- eqrcode — QR code generation
- Gettext — i18n
- Telemetry & ecto_psql_extras — observability
- Tailwind CSS & DaisyUI — styling
- Alpine.js — frontend interactivity
- topbar — page-load progress bar
- Podlove Web Player — podcast episode player
- Linux Mint — development OS
- Visual Studio Code — editor
- Docker & Docker Compose — QA environment, see DOCKER.md
- Node.js & npm — frontend asset tooling
- esbuild — JS bundling
- Credo — static code analysis
- Igniter — codegen/patching framework
- Claude Code & Tidewave — AI-assisted development
- usage_rules — gathering dependency usage guidance for AI coding tools