{"id":89492,"date":"2024-10-22T15:24:56","date_gmt":"2024-10-22T15:24:56","guid":{"rendered":"https:\/\/outliereditor.co.za\/?p=89492"},"modified":"2025-11-17T17:38:57","modified_gmt":"2025-11-17T17:38:57","slug":"the-tools-we-use-to-make-our-charts-and-dashboards","status":"publish","type":"post","link":"https:\/\/outliereditor.co.za\/index.php\/2024\/10\/22\/the-tools-we-use-to-make-our-charts-and-dashboards\/","title":{"rendered":"The tools we use to make our charts and dashboards"},"content":{"rendered":"\n<p>We often get asked what we use at The Outlier to make our charts and dashboards, so here&#8217;s a quick rundown.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Data and charts<\/h2>\n\n\n\n<p>This is how we created the more than 600 static charts in the <a href=\"https:\/\/charts.theoutlier.co.za\/\">Our World in Charts<\/a> gallery:<\/p>\n\n\n\n<p><strong>Data work:<\/strong> We mostly use Google Sheets, although we&#8217;re finding more and more reasons to use Microsoft Excel. <\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/theoutlier.co.za\/section\/databites\/\">10 spreadsheet formulas we use to superpower our data analysis<\/a><\/li>\n<\/ul>\n\n\n\n<p><strong>Design work: <\/strong>There are a lot of data visualisation tools out there, but two of our favourites are&nbsp;<a href=\"https:\/\/flourish.studio\/\" target=\"_blank\" rel=\"noreferrer noopener\">Flourish&nbsp;<\/a>and&nbsp;<a href=\"https:\/\/www.figma.com\/\" target=\"_blank\" rel=\"noreferrer noopener\">Figma<\/a>. Flourish is an online tool for turning data into charts, and Figma makes it easy to edit vector-based graphics. We generally start off in Flourish and move to Figma for the finishing touches.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/theoutlier.co.za\/databites\/2023-09-05\/195\/creating-beautiful-custom-charts-with-flourish-and-figma\">How we create custom charts using Flourish and Figma<\/a><\/li>\n<\/ul>\n\n\n\n<p><strong>Publish: <\/strong>Our charts are published in WordPress but displayed through a custom front-end built in Svelte (JS) and hosted on Vercel.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Feature projects<\/h2>\n\n\n\n<p>We also work on more custom visualisations for larger projects, such as the <a href=\"https:\/\/roadtojet.theoutlier.co.za\/\">Road to a Just Energy Transition<\/a> and <a href=\"https:\/\/perfectstorm.theoutlier.co.za\/\">A Perfect Storm<\/a>. Putting these together takes month of work, but the tools we use make it easier:<\/p>\n\n\n\n<p><strong>Static charts<\/strong>: Once we&#8217;ve cleaned up and crunched the data, the charts are mostly created as above, with Flourish and Figma.<\/p>\n\n\n\n<p><strong>Interactive charts:<\/strong> When there&#8217;s a narrative to tell, we spend time making interactive charts. These are built in Svelte and D3.js.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/theoutlier.co.za\/databites\/2023-04-15\/82\/steps-to-create-a-svelte-component-library\">10 steps to create a custom Svelte component library<\/a> <\/li>\n<\/ul>\n\n\n\n<p><strong>Maps:<\/strong> Using <a href=\"https:\/\/leafletjs.com\/\" target=\"_blank\" rel=\"noreferrer noopener\">Leaflet.js<\/a> with vanilla Javascript is pretty simple when you need to make a map: add the Leaflet library and CSS file, add a few lines of code and you\u2019re done. <\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Dashboards<\/h2>\n\n\n\n<p>Custom dashboards like <a href=\"https:\/\/insights.theoutlier.co.za\/charts\/260\/ZAF\/transport\/za-passenger-rail\">Outlier Insights<\/a> and <a href=\"https:\/\/www.theoutlier.co.za\/tools\/consumer-prices\">Consumer Prices<\/a> are mostly built in <a href=\"https:\/\/www.linkedin.com\/company\/observable\/\">Observable<\/a>&#8216;s Plot Library, which is based on D3js.<\/p>\n\n\n\n<p>Again, we use Svelte and Vercel for the JS\/HTML and hosting.<\/p>\n\n\n\n<p>Data for these projects is mostly stored in an SQL database \u2013 typically MySQL, but increasingly in PostgreSQL via <a href=\"https:\/\/www.linkedin.com\/company\/supabase\/\">Supabase<\/a>.<\/p>\n\n\n\n<p>We&#8217;re fairly firm on these tools but things do change gradually as new tools improve or we need specific functionality. For example, historically we were mostly focused on PHP and MySQL for all our sites but we&#8217;re now 90% NodeJS-based and hosted on Vercel.<\/p>\n\n\n\n<p>We&#8217;re also using Supabase for almost all new database projects in place of MySQL hosted on Digital Ocean. Supabase is basically PostgreSQL but its Node\/JS interface makes it a natural fit for our mostly JS-based websites\/visualisations.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Office miscellany<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>We use <a href=\"https:\/\/www.linkedin.com\/company\/postmarkapp\/\">Postmark<\/a> for transactional email<\/li>\n\n\n\n<li><a href=\"https:\/\/www.linkedin.com\/company\/fathom-analytics\/\">Fathom Analytics<\/a> for tracking (better privacy)<\/li>\n\n\n\n<li><a href=\"https:\/\/www.linkedin.com\/company\/touchbasepro\/\">TouchBasePro<\/a> for newsletters<\/li>\n\n\n\n<li><a href=\"https:\/\/www.linkedin.com\/company\/notionhq\/\">Notion<\/a> for day-to-day work<\/li>\n\n\n\n<li><a href=\"https:\/\/www.linkedin.com\/company\/trello\/\">Trello<\/a> for our design service tracking<\/li>\n\n\n\n<li><a href=\"https:\/\/www.linkedin.com\/company\/payfast\/\">Payfast by Network<\/a> for payments<\/li>\n\n\n\n<li><a href=\"https:\/\/www.linkedin.com\/company\/tiny-spec-inc\/\">Slack<\/a> for team communication<\/li>\n<\/ul>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>We often get asked what tools power the hundreds of charts and dashboards we produce at The Outlier. From data crunching in Google Sheets to designing with Flourish and Figma, we&#8217;ve fine-tuned a process for creating both static and interactive visuals. Our special data deep dives are built with Svelte and D3.js to help bring complex stories to life. The Outlier&#8217;s editor and tech wizard <Strong>Alastair Otter<\/strong> offers a quick tour of the tools we rely on.<\/p>\n<p>\ud83d\udee0 <a href=\"https:\/\/www.theoutlier.co.za\/how-to\/2024-09-17\/89407\/unlock-the-power-of-colour\">READ MORE<\/a><\/p>\n","protected":false},"author":1,"featured_media":89495,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[448,1387,14],"tags":[1199,1204,1206,1205,1211,475,1214,486,471,454,1208,1215,845,1217,1213,1218,1210,1209,468,462,1219,1216,1207],"newsletter-post":[],"site":[],"class_list":["post-89492","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-how-to","category-the-outlier","category-tools","tag-charts","tag-data-bites","tag-data-tools","tag-dataviz","tag-digital-ocean","tag-excel","tag-fathom-analytics","tag-figma","tag-flourish","tag-google-sheets","tag-javascript","tag-notion","tag-outlier-insights","tag-payfast-by-network","tag-postmark","tag-slack","tag-sql","tag-supabase","tag-svelte","tag-tools","tag-touchbasepro","tag-trello","tag-wordpress"],"acf":{"big_number":"","big_number_caption":"","big_number_link":"","big_number_background":"","big_number_text_colour":"#000000","big_number_icon":false,"big_number_wide":"yes","featured_chart":false,"flourish_chart_id":"","flourish_sub_title":"","flourish_chart_width":"medium","is_newsletter_post":"No","post_style":"blc","show_on_front":"Yes","link_through":"Yes","chart_url":"","background_colour":"#0089AA","text_colour":"#FFFFFF"},"_links":{"self":[{"href":"https:\/\/outliereditor.co.za\/index.php\/wp-json\/wp\/v2\/posts\/89492","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/outliereditor.co.za\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/outliereditor.co.za\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/outliereditor.co.za\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/outliereditor.co.za\/index.php\/wp-json\/wp\/v2\/comments?post=89492"}],"version-history":[{"count":15,"href":"https:\/\/outliereditor.co.za\/index.php\/wp-json\/wp\/v2\/posts\/89492\/revisions"}],"predecessor-version":[{"id":89514,"href":"https:\/\/outliereditor.co.za\/index.php\/wp-json\/wp\/v2\/posts\/89492\/revisions\/89514"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/outliereditor.co.za\/index.php\/wp-json\/wp\/v2\/media\/89495"}],"wp:attachment":[{"href":"https:\/\/outliereditor.co.za\/index.php\/wp-json\/wp\/v2\/media?parent=89492"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/outliereditor.co.za\/index.php\/wp-json\/wp\/v2\/categories?post=89492"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/outliereditor.co.za\/index.php\/wp-json\/wp\/v2\/tags?post=89492"},{"taxonomy":"newsletter-post","embeddable":true,"href":"https:\/\/outliereditor.co.za\/index.php\/wp-json\/wp\/v2\/newsletter-post?post=89492"},{"taxonomy":"site","embeddable":true,"href":"https:\/\/outliereditor.co.za\/index.php\/wp-json\/wp\/v2\/site?post=89492"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}