Skip to content
This repository has been archived by the owner on Jan 30, 2025. It is now read-only.

Latest commit

 

History

History
148 lines (110 loc) · 7.12 KB

README.md

File metadata and controls

148 lines (110 loc) · 7.12 KB
Zoonk Banner

Caution

Project No Longer Maintained

Uneebee is no longer being maintained. I’m building a new platform, Zoonk, with a different focus. Instead of continuing Uneebee, I’m restructuring everything from the ground up to create a better way to learn through interactive courses.

The new project will initially use LLMs for learning and later expand to allow course creation, similar to Uneebee but with a more refined approach.

If you liked Uneebee, feel free to fork it. To follow the progress of Zoonk, check out the new repo.


Open-source alternative to create interactive courses like Duolingo.
Learn more »

Roadmap · Community

Table of Contents

About this project

Interactive learning is more effective than traditional methods. Learners remember 10% of what they hear, 20% of what they read but 80% of what they see and do. That's why 34 hours of Duolingo are equivalent to a full university semester of language education.

We love Duolingo. We think those kinds of interactive experiences should be used in more fields. That's why we're building Zoonk, an open-source platform to create interactive courses like Duolingo.

Tech stack

Getting started

Follow the instructions below to get Zoonk up and running on your local machine. We have a Dockerfile for deploying our demo app to Fly. For using Docker locally, see this.

Requirements

  • Elixir 1.17+ and Erlang 26+. Run elixir -v to find your current version for Elixir and Erlang.
  • Hex: mix local.hex.
  • Phoenix: mix archive.install hex phx_new.
  • PostgreSQL 15+: PostgreSQL.
  • (Linux users only): inotify-tools.

Local development

  • Run mix setup to install dependencies and set up the database and assets.
  • Run mix seed to fetch initial data to the database (See options).
  • Run mix phx.server to start a development server.
  • Run mix test to run tests or mix test.watch to run tests and watch for changes.
  • Run mix ci to run code quality checks.
  • Run mix locale to update translation files.

SSL on localhost

Prefer to do local development using SSL to resemble production as much as possible. You can use mkcert to generate a certificate. After you install mkcert, follow the steps below:

  • Create a cert directory under priv: mkdir priv/cert.
  • Generate a new certificate: mkcert -key-file priv/cert/selfsigned_key.pem -cert-file priv/cert/selfsigned.pem localhost zoonk.test "*.zoonk.test" apple.test.
  • Run mkcert -install to install the certificate in the system trust store.
  • You may also need to enable Allow invalid certificates for resources loaded from localhost on Google Chrome flags.
  • Restart your local server: mix phx.server. You may also need to restart your browser.

You also need to make sure your machine maps localhost to a test domain (we're using zoonk.test for this guide). dnsmasq allows you to resolve domains to your local machine without having to change your /etc/hosts file. To install dnsmasq:

brew install dnsmasq

# Create a configuration directory
mkdir -pv $(brew --prefix)/etc/

# Set up your domains
echo 'address=/zoonk.test/127.0.0.1' >> $(brew --prefix)/etc/dnsmasq.conf
echo 'address=/.zoonk.test/127.0.0.1' >> $(brew --prefix)/etc/dnsmasq.conf
echo 'address=/apple.test/127.0.0.1' >> $(brew --prefix)/etc/dnsmasq.conf

# Add dnsmasq to your resolver
sudo mkdir -v /etc/resolver
sudo bash -c 'echo "nameserver 127.0.0.1" > /etc/resolver/zoonk.test'
sudo bash -c 'echo "nameserver 127.0.0.1" > /etc/resolver/apple.test'

# Start dnsmasq
sudo brew services start dnsmasq

That's it! You can now start your local server (mix phx.server) and test your domains using:

Mailer

We're using Resend to send emails. To make it work in production, you need to set the following environment variables on your server:

  • RESEND_API_KEY: Your Resend API key.

Storage

You need to use an S3-compatible storage service to store your files. At Zoonk, we're using Tigris. You need to add the following environment variables:

  • AWS_ACCESS_KEY_ID: Your AWS access key ID.
  • AWS_SECRET_ACCESS_KEY: Your AWS secret access key.
  • AWS_REGION: Your AWS region.
  • BUCKET_NAME: Your AWS bucket name.
  • AWS_ENDPOINT_URL_S3: Your AWS endpoint URL.
  • AWS_CDN_URL: Your AWS CDN URL (optional. If missing, we'll use the S3 endpoint URL).
  • CSP_CONNECT_SRC: Your S3 domain (i.e. https://fly.storage.tigris.dev).

Translations

Follow the steps below to add a new language to Zoonk:

  1. Copy the priv/gettext/en directory to priv/gettext/<language_code>.
  2. Translate the *.po files.
  3. Add the language code to the locales list in config/config.exs.
  4. Add the language name to @supported_locales in lib/translate/translate_plug.ex.

Sponsors