High School Notes

Buy and sell great high school notes

Visit Website
September 2021 First sale

Overnight I got the "first payment" email from Stripe - first real customer! Luckily the payment went through, however there was an issue with the outbound payment. Unfortunately I hadn't completed the Stripe Connect onboarding flow. Should be an easy fix - but now we're officially in business!

August 2021 Minimum Viable Product

After months of slowly hacking away, High School Notes is finally starting to be use-able. There was some last-minute clearing up of the database and smooshing some migrations together in order to have everything pristine from the get-go.

Now I can take a look at polishing the rough edges, and getting some real customers!

2 Comments

  1. 1

    How did you get notes on the website? Did you pay for them?

    1. 1

      No - the majority has just been organic. Ran some Facebook/Instagram ads but they didn't seen to drive much new content (likely poor timing around exams).

July 2021 Exploring Stripe Checkout

Getting closer to completing the checkout flow and I realised that I didn't implement any cart functionality, and that I might be missing out on additional payment options (like Apple Pay or Google Pay).

Stripe Checkout is a hosted payment platform that takes care of all that and is likely highly optimised to improve conversion. Unfortunately it does require re-jigging some database structure in order to record carts/checkouts in the database to complete them.

As I got closer to finishing this implementation it does appear as though the best practices for setting up products has changed, but I'll leave that for another day.

Comment

June 2021 Exploring Laravel Scout & Algolia

I've used Laravel Scout before for server-side search. Using Algolia under the hood it'd render regular old Blade views back to the client. However I'm keen to explore some client-side search here knowing that it won't have much of an impact on SEO.

Hooking up Laravel Scout is easy and it automatically offloads the content to Algolia. Using Instantsearch.js with Algolia does provide a nice user experience. The docs aren't great and there's a lot of stuffing around but I have it working technically speaking.

I'll need to dedicate some more time to making it look and feel more integrated rather than some plonked in JavaScript.

1 Comment

  1. 1

    Hi Dwight, interesting! I was wondering, would you be interested in experimenting with a semantic search API that allows you to find content by meaning (https://relevance.ai/discovery/)? We're building a product for that providing 100k API requests for free (10x compared to Algolia, with actually working NLP capabilities).

May 2021 Exploring Laravel Nova

I've set up Laravel Nova a number of times on client projects but I've never really properly used it as a user. As a developer it's always too easy to go in and fix a problem with the data another way.

I'm working to properly configure Nova for the app so that it can be used to properly manage the site without having to make manual changes or access the database.

Generally speaking it works well, but the policies around authorising what can or cannot be done aren't great. There's a clash between what can be done on the public side vs. what can be done on the admin side.

Comment

April 2021 Exploring Cloudflare Analytics

Rather than go with Google Analytics I was curious to try something different and more privacy conscious. I like Cloudflare's analytics when using them for DNS however as I'm using Route 53 for this I hooked up their new analytics product.

It's relatively basic, and doesn't give a whole lot of insight. I suspect because there's still a lot of traffic from bots (indexers and scrapers) it's hard to identify legitimate traffic and make anything of it.

I'll keep it on for now - maybe after launch it will become more useful. Otherwise I'll just remove it.

Comment

March 2021 Exploring Tailwind UI

Even though I've been baking the UI myself with Tailwind CSS I have been using Tailwind UI for inspiration and have pulled a few components and utilities out of the library.

I did have to upgrade the project from Tailwind 1.x to Tailwind 2.0 in order to drop the Tailwind UI NPM dependency, but luckily that was relatively straight forward.

It did require providing my own styles for form inputs but that does help give the site it's own unique feel.

Comment

February 2021 Exploring Honeypots

Strangely, this quite little website with few inbound links is getting a heap of traffic from random parts of the world registering accounts with jibberish emails. Even more strangely, some of these jibberish emails are even being verified.

While it's nice to see the user count grow (even though it's not legitimate) my email host doesn't appreciate the higher bounce rate and I don't want to be wasting resources.

I was able to hook up Spatie Honeypot into Jetstream's authentication flows to stop the spam joins. In addition Laravel Vapor's firewall rules allowed me to block traffic from suspected bots which also cut down requests.

Comment

January 2021 Exploring Laravel Livewire & Alpine.js

With this project I really didn't want to go down the same road with React or Vue.js again. Rendering HTML straight from the server is nice and easy but also has SEO benefits.

Laravel Livewire and Alpine.js are used by Laravel Jetstream so they're already installed, and I'm playing to see how it can improve the experience of uploading notes.

Displaying form validation errors in realtime as well as providing feedback while notes are uploaded after a form submission are really easy. Being able to upload directly to S3 and skip sending files through a serverless function is also a nice win.

Ideally I'd like to be able to roll authentication into the upload form too - so you can create an account/login to an existing account in the same form as you upload notes. I think Livewire might be able to assist in this.

Comment

December 2020 Exploring Laravel Vapor

Previously I've mostly hosted Laravel apps on EC2 servers that are provisioned with Laravel Forge. I've also used Heroku to make my life easier.

However this is a good opportunity properly explore serverless hosting with Laravel Vapor. I'm very interested in how Vapor might be helpful on some larger Laravel projects I work on but to see how it works on smaller projects to start.

Out of the box the response times on simple pages hover around the 100ms mark which isn't bad, but not as good as hosting on regular servers. However it may be a worthwhile compromise if it takes the heat out of scaling.

Comment

About

High School Notes started as an excuse to play with new technologies: Laravel Jetstream, Laravel Vapor, Laravel Livewire, Alpine.js, Algolia and Stripe Connect. As it came together it made sense to see if it would work.