Site Updates

August 2020

August 23rd, 2020

  • New icon, white background and rounded corners
  • Website loading performance improved

Navigation updated: The blue menu at the top changes based on the page:

  • Series: Shows name of series (e.g. HSK, IC2) and back button
  • Flashcards: Show pager, series / deck name / card number and card count


  • Skip to front/back of deck
  • Skip between series (when on first/last card and series exist)

Tech diary:

  • Site moved to gatsby
  • Fully hosted on CloudFront as a static website
  • Deployment automated

February 2020

February 16th, 2020

  • Add robots.txt / sitemap

February 9th, 2020

  • Image compression via webpack
  • Use font awesome 5 via svg
  • Support injected fa tags via reStructureText in django-docutils
  • Caching for graphql via query/variable hash

February 8th, 2020

  • Break components / routes up
  • Font awesome 5
  • Accessibility tweaks (e.g. doctype, alt tags in images)
  • Browse: Debounce input field to fix lag

February 3rd, 2020

  • Responsive UX fixes

February 2nd, 2020

  • Rewritten in React + Relay (graphql) + React-Navi
  • Pages autoload in background
  • Removed usage of heavy django template logic and based (mostly)

February 1st, 2020

  • Update Django to 3.x

December 2019

December 29th, 2019

  • Move packaging pipenv -) poetry

  • Remove based (no more entangled monolith tying this thing down)

  • Internal renames, in preparation for new website:

    • Renamed "Deck" to "Series"

      e.g. HSK is a Series

    • Renamed "Collection" to "Deck"

      e.g. HSK Part 1 is a Deck inside the HSK Series

December 28th, 2019


  • Decouple into python package
  • Port over ux from based -) this website

December 27th, 2019


  • Open source reStructuredText parts into tony/django-docutils

  • Remove gfx, taxonomy, user parts

    These were tangled ORM parts / constrained by templates

December 7th, 2019


  • Update npm packages, including raw-loader
  • Minor python package updates

November 2019

November 29th, 2019


  • npm package updates

November 28th, 2019


  • Remove TOML lexer, pygments includes already
  • Fix regular expression issue effecting code snippets

November 17th, 2019

Based / Internal:

  • flake8 fixes via autoflake, black, isort
  • python 3.x updates via pyupgrade

October 2019

October 22nd, 2019

Based / Internal:

  • Move webpack configs to typescript
  • Update npm packages for bulma, etc.
  • Webpack: Use chunk splitting for django-webpack-loader
  • Static files: Serve from cloudfront

October 21st, 2019

Internal updates:

  • Update webpack, node-sass, update to node 12.x
  • Update django and django-related packages


  • Fix bug displaying dictionary with django-filters

August 2018

August 25th, 2018

Internal updates:

  • Run python code through black
  • Run JS code through prettier

July 2018

July 7th, 2018

Internal updates:

  • Update Python dependencies

April 2018

April 28th, 2018

  • Update from bulma 0.6.2 to 0.7.1

April 8th, 2018

  • Update from webpack 3.x to webpack 4.x

March 2018

March 18th, 2018

  • Update dependencies

March 6th, 2018

  • Update Django (security release)

February 2018

February 19th, 2018

  • Update packages

January 2018

January 15th, 2018

  • Upgrade bulma to 0.6.2
  • Remove Roboto webfont, rely fully on system fonts

December 2017

December 8th, 2017

  • Upgrade to Django 2.0

November 2017

November 28th, 2017

  • Added progress bar at top of page when loading new content
  • Restructure template system to port PJAX into based

November 15th, 2017

  • Fix links to PlecoDict 2.0 files which were broken for some decks

November 7th, 2017

  • Internal updates to webpack configuration to re-use common build information

November 3rd, 2017

  • Update styling of headers and text

November 2nd, 2017

  • Fix search

October 2017

October 30th, 2017

  • Improve resilience of 404 URL's
  • Fix issue where pjax would bind to downloads

October 29th, 2017

  • Move static content pages to reStructuredText

October 28th, 2017

  • Massive refactor of template system and pjax.

    This add pjax support (fast page transitions) to the CHANGES pages

    Fix inconsistencies when flipping between site pages and flashcards

  • Internally refactor search and directory into its own application

October 27th, 2017

  • Get scrolling navbar working on updates page
  • Port old updates from the about page over

October 26th, 2017

  • Start noting updates

August 2017

August 30th, 2017

  • Performance: Static files are now served through S3
  • Look at feel: Switched web framework from Bootstrap to Bulma
  • More internal code cleanup to make maintenance easier(/li)

April 2017

April 22nd, 2017

  • Breadcrumb navigation shows full name of card set instead of acronym.
  • Breadcrumb navigation shows the total lessons/cards.

March 2017

March 13th, 2017

  • Improvements for browsing flashcards on mobile devices.

March 3rd, 2017

  • You can now use a search bar to find chinese characters by english definition, simplified, traditional and pinyin. The search bar on the top right can initiate a search from anywhere on the website.

March 2nd, 2017

You can now browse chinese character by pinyin using the english alphabet. It will search through all possible tones / diacratics for you. Use the "Pinyin" field. So search "wo" can match any tone of wo.

January 2017

January 29th, 2017

  • Default font is now Roboto (was using Verdana earlier).

January 28th, 2017

  • Upgraded to Bootstrap 4
  • More internal cleanup

January 27th, 2017

The Cleanup

  • HSKFlashcards has been updated internally to faciliate development of new features for exploring 中文!
  • Bootstrap has been updated from 2 to 3. Django has been updated from 1.4 to 1.10. The codebase has been cleaned up significantly and work will continue over the next few days.
  • In addition, social networking will be reintegrated into the site for Twitter and Facebook

April - October 2012

The New HSKFlashcards

Over the past 5 months I have spent weekends and late nights trying to fill my own technical debt. Alchemy is when we turn matter into something useful. What is matter lies in the perceiver - a vacuum or void is space with time is matter to the hermetic hacker. The best material to repay technical debt is inherit invested effort from a prior generation. Nature's grace gave me the fortune of meeting Jacob, thanks is owed to him for his time making the original site a reality. Not only to him, my teachers, the nobel people who gave us permission to use their content, the sages and long-forgotten who undertook preserving Chinese culture and the open source community.

Our deeds, discipline and actions are not coincidental, we're a model for bringing order out of chaos, taxonomy out of mess, hope in a hard world, light to darkness, truth to lies, depth to shallowness, so as to create fixed stars in a world where people roam so lost. We do what we do not out of pride but expectation for what we leave after us. I hope this method and its fruits will be passed down to the generations to nourish.