GithubHelp home page GithubHelp logo

vincentrohde / bachelor Goto Github PK

View Code? Open in Web Editor NEW
0.0 1.0 0.0 2.02 MB

Educational plattform, that returns tailor-made content based on the student‘s learning profile and recommends new content on observed preferences 🎓

License: MIT License

Dockerfile 0.90% JavaScript 45.81% HTML 0.75% Shell 10.55% Less 2.42% SCSS 15.85% Makefile 0.21% Nunjucks 23.50%
javascript nodejs apostrophe

bachelor's Introduction

Bachelor Thesis

Educational platform, that returns tailor-made content based on the student‘s learning profile and recommends new content on observed preferences.

home-screen

Table of Contents

  1. Getting Started
  2. Concepts
  3. Features
  4. Technical Details
  5. Built With

Getting Started

Prerequisites

Before you start with the installation, please make sure you have set up your environment according to the Apostrophe Documentation. This will save you a lot of headaches ;)

Installation

Clone the repository

git clone https://github.com/vincentrohde/bachelor.git

Install the dependencies.

npm install

Account Creation

Connect to the Container

First of all you need to connect with the cli of your Apostrophe container. To do so, enter the following command.

docker exec -it { your Apostrophe container id } /bin/bash
Set up your account

In the beginning, start by creating an admin account. The prompt will ask for a password of your choice. Make sure to remember your password!

node app.js apostrophe-users:add admin admin

Starting the Server

Now you can run the server, like this.

node app.js

Once the server runs, the project is ready under this URL:

http://localhost:3000

Login

The first thing you will have to do, is navigate to the login screen.

http://localhost:3000/login

Now you can login using the admin credentials you set up earlier.

Concepts

Okay, now that you have everything up and running, it's time to create some content. By doing this, you will get a better understanding of the project's general concepts, when it comes to content management. In the next chapters the focus will be more on the stuff behind the scenes (the backend code).

Features

Tracker

The Tracker module watches the user's interaction with the site. It collects various data, from content-elements (style, difficulty, practicality, type) and posts/ favorites (id, tag (category)). These are stored and managed in two cookies: learningStyle (the student profile) and favorites. These cookies are processed by the Preferences module.

Likes

Every content-element inside a post is equipped with a like widget. The user has the option to share his content preference, with the Tracker, by liking or disliking the element.

Favorites

Each post can be saved by the user, through the favorite icon. Setting a post as a favorite will be picked up by Tracker. Favorites are the main source for content recommendation (posts on the front page).

Preferences

The Preferences module generates user profiles, based on the data from the Tracker generated cookies. The learning-style profile is used by the Curator module to filter the content inside posts. While the favorites profile is used when querying from MongoDB.

Curator

The Curator module is used to filter content-elements from the response object for a Post page, based on the provided learning profile. The algorithm's priority of filtering is the following, from highest to lowest:

  1. Learning style
  2. Difficulty
  3. Practicality
  4. Media Type

Technical Details

apostrophe-pages:beforeSend Event

The apostrophe-pages:beforeSend event is an event of the Apostrophe internal apostrophe-pages module. It is the final event before sending out data to the client. This project makes use of this event in two situations:

  1. Content aggregation on the startpage
  2. Content curation inside posts

In both cases it is used to allow alteration of the response to the client.

Apply Filters To Content Requests (start page)

When requesting Posts for the start page, a few filters are applied to the database request.

req.data.filteredPosts = await self.apos.docs.getManager('post')
    .find(req)
    .tags(tagPreferences)
    // newest posts
    .sort({ updatedAt: -1 })
    .limit(5)
    .toArray();

Built With

Back To Top

bachelor's People

Contributors

vincentrohde avatar

Watchers

 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.