Giter VIP home page Giter VIP logo

uneebee's Introduction

UneeBee Banner

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

Cloud . Roadmap . Community

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 kind of interactive experiences should be used in more fields. That's why we're building UneeBee, an open-source platform to create interactive courses like Duolingo. You can use it at your organization, school, or using our marketplace to share your experience in a fun way.

Tech stack

We're deploying our cloud products to Fly and Neon.

Getting started

Requirements

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

Local development

  • Run mix setup to install both dependencies and set up both the database and assets.
  • Run mix seed to fetch some initial data to the database.
  • Run mix phx.server to start a development server.
  • Run mix test to run tests.
  • Run mix ci to run our 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 uneebee.test "*.uneebee.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 uneebee.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=/uneebee.test/127.0.0.1' >> $(brew --prefix)/etc/dnsmasq.conf
echo 'address=/.uneebee.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/uneebee.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

By default, we upload files to your local server and store them in the priv/static/uploads directory. However, we also support uploading files to Cloudflare R2. To use R2, you'll need to add a new CORS policy:

Go to Settings -> CORS Policy to add a new CORS policy. You can use the following settings:

[
  {
    "AllowedOrigins": [
      "http://localhost:4000",
      "https://localhost:4001",
      "https://uneebee.test:4001"
    ],
    "AllowedMethods": [
      "GET",
      "PUT",
      "POST"
    ],
    "AllowedHeaders": [
      "*"
    ],
    "ExposeHeaders": []
  }
]

Make sure to add/update the AllowedOrigins list with the domains you want to allow to upload files to your server.

Reading images

You need to enable public access to allow your users to read images. Go to Settings -> Public Access -> Custom Domains to do it. You must add a domain where you'll access your images. For example, we use cdn.uneebee.com for our production server.

Setting up environment variables

You need to set the following environment variables on your server:

  • STORAGE_BUCKET: The name of your bucket.
  • STORAGE_ACCESS_ID: Your access ID key.
  • STORAGE_ACCESS_KEY: Your access key.
  • STORAGE_BUCKET_URL: The URL of your bucket. (i.e. https://mybucketurl.r2.cloudflarestorage.com).

Sponsors

We don't have any sponsors yet. Add your brand here by sponsoring our project.

uneebee's People

Contributors

wceolin avatar dependabot[bot] avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.