Code Monkey home page Code Monkey logo

adocasts's Introduction

Adocasts

Adocasts provides education lessons, screencasts, and livestreams on AdonisJS, NodeJS, JavaScript, and more. We have a vast library of free lessons and resources that expands weekly to help get you up and running with AdonisJS.

Get even more by joining Adocasts Plus

๐Ÿ“š Ready to learn? Check out adocasts.com
๐ŸŽ‰ New lessons every week!


YouTube Badge Twitter Badge Twitch Badge


Before We Start

Some portions of the Adocasts site rely on production data or external APIs & SDKs for information. The site will still function fine for you locally, but these sections may not render unless you set up an account specifically for them.

  • Trending Lessons: Relies on our Plausible API connection.
  • Billing & Plans: Relies on our Stripe connection. You can create your own Stripe account with test data to get this working.
  • Content Schedule: Relies on our Notion API connection.
  • Social Authentication: Relies on Google and GitHub services.

Prerequisites

  • PostgreSQL โ€” We use PostgreSQL as our database driver so you'll either want it installed on your machine or a service that provides it.
  • SMTP Provider โ€” Locally, we like to use MailTrap
  • Redis Server โ€” We now require a Redis connection via Bentocache
  • Node v20.6+ โ€” Recommended

Installation

  1. Clone the repository
git clone https://github.com/adocasts/adocasts.git
  1. Install NPM packages
npm i
  1. Duplicate .env.example and rename .env
  2. Fill out the .env variables

Data

We provide a StarterSeed that will populate your database with faker data to populate pages on the Adocasts site.

I haven't tested this yet since our migration from AdonisJS 5 to 6. If you run into any problems, feel free to open an issue.

  1. Migrate your database
node ace migration:run
  1. (Optional) If you'd like to start fresh (without faker data), open our StarterSeed at database/seeders/StarterSeed.ts and comment out the seedUsersAndContent() call within the run method.
public async run() {
  const trx = await Database.transaction()
  
  try {
    await this.seedRoles(trx)

    if (!Application.inTest) {
      // await this.seedUsersAndContent(trx)
    }

    await trx.commit()
  } catch (error) {
    await trx.rollback()
    console.log({ error })
  }
}
  1. Seed our faker data
node ace db:seed

adocasts's People

Contributors

john-mantas avatar julien-r44 avatar tomgobich avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

adocasts's Issues

Add ability to link updated or outdate lesson

Specifically, the LLA5 Preview series lessons should provide a link to the updated version for the LLA5 series. Should add one of the following:

  • Ability to specify an updated lesson on outdated lesson
  • Ability to specify an outdated lesson on an updated lesson

The latter would probably be more convenient, but a little messier data-wise unless we do a pivot table.

On the outdated lesson display a notice linking to the updated lesson.

Add fallback image when one isn't provided

Add a dynamic fallback image (something similar to GitHub's dynamic OG image) when a post doesn't contain an image.

I used to have this somewhere... maybe remnants are still in the Studio project?

Contributors can't preview their posts

When a contributor creates either a future dated post or a draft post they don't have permission to view the post to preview it. Looks like it might be restricted to admins.

Need to add an addition to also allow post authors to preview.

Add video download option

For Adocasts+ members, I'd like to add the option to download the lesson's video. I'm not sure whether this can be supported for pre-existing YouTube videos, but it should be supported for Bunny Stream videos.

Switch to cache friendly view models where possible

We need to utilize caching where possible. Right now our Edge views and components expect Lucid model-based data. This is great but causes an issue when we go to use cached data since this is serialized.

Let's switch our Edge views and components to expect serialized data, where it makes sense so that we can easily use cached data.

Add schedule section

Let's add a schedule section that'll allow me to plan out upcoming lessons. Let's use actual post records for these plans so that we can incrementally work on the post itself through the schedule as well.

Should allow:

  • Working Title
  • Short Description
  • Long Description
  • Target Release Date
  • Notes
  • Requested By line (so that we can follow up with the individual to inform them)
  • Users to subscribe, to get an email when the release date is both confirmed (by me) and the post is released.

Redesign user-facing pages

I feel like the current layout is too blog layout focused in that it focuses too much on individual lessons and not enough on series.

Do some research on similar series/course-based sites to see if you can find a better way to preset content.

I'd also love to incorporate Unpoly so the site feels more like a SPA and so users can keep a youtube video player as they traverse to other lessons.

Add link to edit profile on profile

When an authenticated user visits their own profile, there should be a link on the profile that'll take them to their profile edit form.

For example, if I (tomgobich) am authenticated and on my profile at (/@tomgobich) there should be an "Edit Your Profile" button somewhere that links to /settings/profile

Track sessions

I'd like to add functionality that'll allow users to see IP addresses and times at which they've logged in. With this, I'd also like to add the ability to logout of any one session or all sessions.

When progression is 0% the lesson shouldn't be counted as "in-progress"

The progression percentage will use readPercent or watchPercent, whichever is greater. Note, readPercent is no longer captured, and is a legacy metric.

I think I'm using Math.floor() on these percentages and it's rounding down to 0%.

If the progression progress is truly 0, then it

  • Shouldn't be displayed in their progression (home page & progression page)
  • Shouldn't show the progression bar

Otherwise, if they do have any progress at all (watchSeconds) maybe we round up to 1% in this specific use-case.

Screenshot 2023-10-14 at 9 21 58โ€ฏPM

Blogs, Streams, and News need view counting like lessons have

There're an event post:sync that takes in a post record and view count that syncs the updated view count to the post model. This is on the lessons.show route, but also need to be added to blog.show, livestream.show, and news.show.

Event.emit('post:sync', { post, views })

Add achievements

In line with the activity table, I'd also like to add an achievement system. Something that'll give XP or badges for certain milestones

  • milestone anniversaries
  • completing x number of lessons
  • commenting x number of times
  • etc

Add livestream section

Livestreams on the site are out-of-date. We'll want to post those that are missing so they're present on the site. Then, let's create a livestream landing page that can be used to:

  • View past livestreams (Adocast Posts)
  • View embed of any active livestream
  • If a livestream is active, add a dismissable alert across the site.

Add support for bunny stream videos

Adocasts+ restricted lessons will need a way to be privately hosted on the Adocasts site. For this, I've chosen Bunny Stream. Need to add support to allow for these videos to be added within Studio, displayed on the site along with all our video functionality.

Bunny's site says they use a version of Plyr so hopefully this'll be rather straightforward since I've already switched all the YouTube videos to Plyr.

Add activity table

Right now collecting an activity feed (for profiles) is a manual process from the various tables. In order to aggregate this towards a progression system, we'll need a way to be able to score these and store it as a single source.

Thinking the app/ViewModels/ActivityVM.ts class could be converted into a full model that would allow us to

  • assign a score per "type" of action
  • backfill existing user's actions into it
  • easily sum up a user's overall score to discern a progression total

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.