Thales Grilo


Up Learn

Screencaps -[ ] Quiz Migration -[ ] Summaries -[ ] Section and Subsection Overview Pages -[ ] Exam Practice by Topic -[ ] Hackathons -[ ] Up Learn Anki -[ ] Ash Backend -[ ] LiveView Admin

Up Learn is a learning effectiveness platform. I’ve been a partner at Up Learn since March 2022, acting as a Tech Lead most of this time. Together we’ve done some very exciting projects:

Quiz Migration

My proudest project, leading a team of 6 engineers, migrating the central feature of Up Learn towards a modern Elixir + React stack (away from a legacy PHP BBOM). Quizzes, apart from being a central part of the Up Learn experience for students, is also at the core of other features the platform heavlity relies on, such as videolessons. As such, running this on a legacy codebase was the single biggest block to a more effective product development cycle.

In total, we migrated 175 thousand quizzes for over 60k+ students, massively improving UX in the process. By tackling the single biggest piece of tech debt, this project unblocked product development potential, allowing even more ambitious projects to take place.


Up Learn courses are organized in subsections - thematically cohesive sets of learning content, such as video lessons, article lessons and quizzes. This is a great, tailored experience for first-time learning, but not satisfying for revising content - a very common use case for Up Learn students.

Subsection Summaries were born after multiple rounds of user research, which validated students’ wish for a quicker way to revise an entire subsection - as opposed to revisiting each lesson.

Summaries are special lessons with a video and an article exposing main concepts of an entire subsection, and also a table of links to each relevant piece of content. As a dev I built the page and added videos to it. As a lead, the team built the article and link table features.

Section and Subsection Overview Pages

The first major step towards migrating learning content since I joined the team happened with the Section and Subsection pages.

Exam Practice by Topic

Also aiming to improve revision experience, we issued a brand new self-assessment tool called Exam Practice by Topic. This introduced the concept of a topic: a higher-level index which may piece together lessons of different subsections if they go over a same concept.

This feature helped students


I wrote an entire post on Up Learn’s blog about this if you wanna learn more

Every two months, Up Learn sets up a hackathon. That’s two days where the entire engineering team can organize, pick and build ad-hoc projects of their own volition. Often these lead to actual improvements on the platform. Getting your hands dirty with different technologies also provides a different angle on engineering decisions - hackathons therefore tend to bring insights leading to improvements in engineering culture.

Up Learn Anki

Probably our most ambitious hackathons - I organized a project and led 12 people to collaborate in building a flashcard app based on AI-generated content, using Up Learn’s content as a source of knowledge. We split in 4 teams and at three days had a working (react-)native app serving multiple choice quizzes (including marking data) from a GraphQL Absinthe / Phoenix / OpenAI / Postgres backend. This one was super fun and super rewarding!

Ash Backend

Out of curiosity and excitement for the Ash Framework, we built a small api using Ash to deliver summary content. Ash is extremely productive, especially at when bootstrapping a project. It took 3 hours to get from 0 ash knowledge to having a GraphQL Absinthe API delivering data from a postgres table. At the end of the first day, we had most content migrated and available via the API.

On the second day we basically built a page to display the content and improved code quality in general.

LiveView Admin

Out of curiosity and excitement for the Phoenix LiveView, we decided to rebuild our custom back-office tool using LiveView.

The stack proved massively more productive, even if in the end we ditched that in favor of other.

For more projects, read the aforementioned blog post.