Welcome to hapijs university. This is a community learning experiment keeping to the values established through the hueniversity distributed classroom. The idea is simple - use GitHub as a platform for teaching people coding skills as a group, where everyone is both a student and a teacher. The goal is to learn how to operate such a distributed classroom and then apply that pattern to other topics by other people.
Lead Maintainer - Jon Swenson
- An assignment is issued.
- Anyone is welcome to fork the project, write code fulfilling the assignment requirements and submit a PR.
- After PRs are submitted, we peer review each others PRs and learn from each others critiques.
- At the end of an assignment and peer review process, we have a nice refined solution to be merged into the project.
- Merge in a PR and move on to the next assignment.
You are welcome to join!
See the list of assignments for instructions on how to
checkout the project in earlier states and work on previous assignments.
Using hueniversity distributed classroom style of learning and development. We are going to build an application with the following features
- A public page(s) accessible to all.
- Route(s) with restricted access. Only authenticated users with correct permissions will have access to restricted routes.
- Sessions support using "a simple cookie-based session management. The user has to be authenticated with a web form, and upon successful authentication, receive a reply with a session cookie." hapi-auth-cookie
- form validation using joi.
- tls / ssl support as described at: learning objectives
- Combat Cross-Site Request Forgery (CSRF) attacks by using hapijs / crumb
- Configure a plugin to serve static files: css, images, and JavaScript.
- Render html templates with a configured template engine (handlebars).
- Configure a plugin to utilize partial html templates and helpers to generate data for html templates.
In the end the application will have the following routes:
- A home page open to the public (unrestricted) -- home.
- A login page with login HTML form (unrestricted) -- login.
- A logged in landing page (restricted) -- loggedin
- The above routes would be in the "home" plugin. .
If desired we can make the loggedin route be it's own plugin with a prefix configured. See plugins tutorial for more about prefixes.
You will learn how to build an application server using node and hapi with the following characteristics. It will start with the basics and move on to more advance topic such as authentication, validation, application architecture, testing, and more.
You should feel comfortable writing simple functions in JavaScript, working with GitHub, using basic git commands, have a basic familiarity with node, and be able to pick up new subjects by reading tutorials and documentation.
We'll start from the basics and make our way to the most advanced topics. The way this course is structured, you can choose which assignments to participate in, so more experienced developers can "sit out" or help others during the basic assignments and participate when it gets to areas they are not as strong in. However, since teaching is one of the most effective ways to learn, participating early will improve the existing skills of advanced developers.
The assignment will include just enough information to get you going, but you will need to do most of the learning on your own by using the wide range of online resources available. However, the real benefit of this process will come from the code review of your Pull Request. This is where expert developers will review your work and provide you specific and actionable feedback.
First, read the Code of Conduct!
Simple, you start by forking this repo.
Every few days a new issue will be posted with an assignment
label. If you would like to participate in the assignment, try to solve it and when you are done, submit a Pull Request back to this repo. Make sure your code complies with the hapi community Style Guide.
While you wait for the assignment to close, take a look at what others are submitting and see if you can improve your own solution (borrow ideas, add tests, write examples, update the documentation). If you see ways in which others can improve their solution, comment on their Pull Request.
Each assignment will have a close date. When the issue expires, one of the Pull Requests submitted will be picked and merged. Any follow up assignments will be based on the merged code.
Before starting the next assignment, make sure your fork matches the current master since only one Pull Request can be accepted.
There are lots of way you can help make hapijs university succeed and help shape a new format for teaching development skills:
- Submit Pull Requests to improve this readme, add examples, write quick tutorials on how to work with git, etc.
- Look for issues with a
help wanted
label ornew contributor
label and help with those. - Randomly pick submitted Pull Request and review them, offering advice and helping others improve their skills.
Open an issue, it's free.