zoonk / uneebee
- среда, 22 ноября 2023 г. в 00:00:03
Platform for creating interactive courses.
Open-source alternative to create interactive courses like Duolingo.
Learn more »
Cloud
.
Roadmap
.
Community
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.
We're deploying our cloud products to Fly and Neon.
Elixir 1.15
or later and Erlang 26
or later. Run elixir -v
to find your current version for Elixir
and Erlang.mix local.hex
.Phoenix
: mix archive.install hex phx_new
.mix setup
to install both dependencies and set up both the database and assets.mix seed
to fetch some initial data to the database.mix phx.server
to start a development server.mix test
to run tests.mix ci
to run our code quality checks.mix locale
to update translation files.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:
uneebee.test
).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.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.
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.
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
).We don't have any sponsors yet. Add your brand here by sponsoring our project.