${studentName}
+${courseName}
+${courseDescription}
+diff --git a/apps/backend/.dockerignore b/apps/backend/.dockerignore new file mode 100644 index 00000000..5171c540 --- /dev/null +++ b/apps/backend/.dockerignore @@ -0,0 +1,2 @@ +node_modules +npm-debug.log \ No newline at end of file diff --git a/apps/backend/.env.example b/apps/backend/.env.example new file mode 100644 index 00000000..0f24be11 --- /dev/null +++ b/apps/backend/.env.example @@ -0,0 +1,20 @@ +## Supabase - DB +PUBLIC_SUPABASE_ANON_KEY= +PUBLIC_SUPABASE_URL= + +## Cloudflare - Video uploads +# Not required - https://cdn.example.com +CLOUDFLARE_BUCKET_DOMAIN= + +CLOUDFLARE_ACCESS_KEY= +CLOUDFLARE_SECRET_ACCESS_KEY= +CLOUDFLARE_ACCOUNT_ID= + +# Email +SMTP_HOST= +SMTP_USER= +SMTP_PASSWORD= +SMTP_PORT= + +# Sentry DNS +SENTRY_DNS= \ No newline at end of file diff --git a/apps/backend/Dockerfile b/apps/backend/Dockerfile new file mode 100644 index 00000000..dff48ecc --- /dev/null +++ b/apps/backend/Dockerfile @@ -0,0 +1,71 @@ +FROM node:slim AS app + +# Add build arguments +ARG PUBLIC_SUPABASE_ANON_KEY +ARG PUBLIC_SUPABASE_URL +ARG CLOUDFLARE_BUCKET_DOMAIN +ARG CLOUDFLARE_ACCESS_KEY +ARG CLOUDFLARE_SECRET_ACCESS_KEY +ARG CLOUDFLARE_ACCOUNT_ID +ARG CLOUDFLARE_BUCKET_ID +ARG SMTP_HOST +ARG SMTP_USER +ARG SMTP_PASSWORD +ARG SMTP_PORT +ARG SMTP_SENDER + +RUN mkdir /app +WORKDIR /app + +# Install pnpm +RUN npm install -g pnpm + +# Install chrome stable from sources, then remove it. Why? The +# npm install of `puppeteer` brings its own bundle chromium build, +# and puppeteer releases are only guaranteed to work with that version. +# +# But the bundled chromium implicitly needs a bunch of shared libs on +# the host. It's a little tedious to find and maintain that list; but +# the official apt distro of `google-chrome-stable` should bring the right +# set along. So do that, but immediately uninstall (to free up layer space). +# +# This is a little brittle, since the puppeteer chrome could in theory diverge +# from the official apt chrome's shared lib deps. But it works.. +# RUN apt-get update \ +# && apt-get install curl gnupg -y \ +# && curl --location --silent https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add - \ +# && sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list' \ +# && apt-get update \ +# && apt-get install google-chrome-stable -y --no-install-recommends \ +# && apt-get remove google-chrome-stable -y \ +# && rm -rf /var/lib/apt/lists/* + +# Add emoji fonts. +# Source: https://gist.github.com/win0err/9d8c7f0feabdfe8a4c9787b02c79ac51 +# RUN mkdir ~/.fonts/ && \ +# wget https://github.com/samuelngs/apple-emoji-linux/releases/download/ios-15.4/AppleColorEmoji.ttf -O ~/.fonts/AppleColorEmoji.ttf + +COPY ./package.json /app +RUN pnpm install +COPY . /app + +# Set environment variables from build args +ENV NODE_ENV=production \ + PUBLIC_SUPABASE_ANON_KEY=$PUBLIC_SUPABASE_ANON_KEY \ + PUBLIC_SUPABASE_URL=$PUBLIC_SUPABASE_URL \ + CLOUDFLARE_BUCKET_DOMAIN=$CLOUDFLARE_BUCKET_DOMAIN \ + CLOUDFLARE_ACCESS_KEY=$CLOUDFLARE_ACCESS_KEY \ + CLOUDFLARE_SECRET_ACCESS_KEY=$CLOUDFLARE_SECRET_ACCESS_KEY \ + CLOUDFLARE_ACCOUNT_ID=$CLOUDFLARE_ACCOUNT_ID \ + CLOUDFLARE_BUCKET_ID=$CLOUDFLARE_BUCKET_ID \ + SMTP_HOST=$SMTP_HOST \ + SMTP_USER=$SMTP_USER \ + SMTP_PASSWORD=$SMTP_PASSWORD \ + SMTP_PORT=$SMTP_PORT \ + PORT=3002 + +RUN pnpm build + +EXPOSE 3002 + +CMD ["pnpm", "start"] diff --git a/apps/backend/certificate.html b/apps/backend/certificate.html new file mode 100644 index 00000000..26392dbf --- /dev/null +++ b/apps/backend/certificate.html @@ -0,0 +1,431 @@ + + +
+ + + + + + +
+ ${dateIssued}
+Signature
+This lesson serves as the introduction to the course "The Ultimate Guide to relocating to the UK via + Study Path." In this session, we will provide an overview of the course and discuss the importance of + effective counseling in the relocation process.
+By the end of this lesson, students should be able to:
+Introduction to the Course
+Importance of Counseling
+Steps for Relocating to the UK via Study Path
+Q&A and Discussion Time
+In this lesson, we introduced the course "The Ultimate Guide to relocating to the UK via Study + Path" and emphasized the significance of counseling in the relocation process. We explored the essential + steps involved in relocating to the UK and highlighted the importance of thorough planning and research. + Students should now have a better understanding of the course objectives and overall expectations. In the next + session, we will delve deeper into the specific requirements for studying in the UK and provide detailed + guidance on university admissions.
+ +Slide Link:
Open Here +Video Link:
+This lesson serves as the introduction to the course "The Ultimate Guide to relocating to the UK via + Study Path." In this session, we will provide an overview of the course and discuss the importance of + effective counseling in the relocation process.
+By the end of this lesson, students should be able to:
+Introduction to the Course
+Importance of Counseling
+Steps for Relocating to the UK via Study Path
+Q&A and Discussion Time
+In this lesson, we introduced the course "The Ultimate Guide to relocating to the UK via Study + Path" and emphasized the significance of counseling in the relocation process. We explored the essential + steps involved in relocating to the UK and highlighted the importance of thorough planning and research. + Students should now have a better understanding of the course objectives and overall expectations. In the next + session, we will delve deeper into the specific requirements for studying in the UK and provide detailed + guidance on university admissions.
+ +Slide Link:
Open Here +Video Link:
+${courseName}
+${courseDescription}
+Slide Link:
Open Here +Video Link:
+Slide Link:
Open Here +Video Link:
+
+ + {$t('course.navItem.lessons.materials.tabs.video.add_video.add_by')} +
+ {#each tabs as item (item.value)} + + {/each} ++ {$t('settings.landing_page.custom_links.description')} +
+ + {#each $landingPageSettings.customLinks.links as link (link.id)} +