Mini Synth is a simple Tone.js synthesizer built with SvelteKit. It runs in all major browsers and was designed to provide Ugandan refugees with a tool to create music digitally.
Launch the production website or learn more about this project in my portfolio.
Mini Synth is built using SvelteKit, mostly written in TypeScript, and styled with Dart Sass. The production site is deployed using Vercel. All audio capabilities are built using Tone.js and all songs are stored using IndexedDB with Dexie.js.
To run the code locally, you must have Node.js installed. Then, run the following in a terminal in this project's root directory:
# this will install all dependencies
npm i
# this will start a development server and open the app in a new browser tab
npm run dev -- --open
Commit messages are prefixed with the following labels to make them easier to read:
This repository is separated into the designs, src, and static directories, along with a few top-level files.
designs
βββ MiniSynth-GitHub-banner.jpg GitHub banner image
βββ MiniSynth-GitHub-socialPreview.jpg GitHub social preview image
βββ miniSynth-UIconcepts-1.ai Illustrator file with all assets
src
βββ lib libaray of Svelte components
β βββ SVGs all icon SVGs
β βββ BPMslider.svelte cassette BPM slider and adjustment buttons (synth)
β βββ cassetteHeader.svelte cassette header section (synth)
β βββ controls.svelte cassette player controls (synth)
β βββ envLi.svelte enviroment list item (info page)
β βββ footer.svlete footer (index and info page)
β βββ helpers.ts helper functions
β βββ indexHeader.svelte header section (index page)
β βββ keyboard.svelte piano keyboard for melody input (synth)
β βββ keyboardControls.svelte three buttons that scroll keyboard (synth)
β βββ reels.svelte contrainer for melody and beats tapes (synth)
β βββ searchBar.svelte search bar (index page)
β βββ songLi.svelte song list item (index page)
β βββ soundboard.svelte soundboard for beats input (synth)
β βββ synth.svelte main synthesizer (song and demo page)
β βββ tape.svelte tape (reels)
β
βββ routes all Svelte file for different pages of the web app
β βββ demo\[slug]
β β βββ +page.svelte dynamic demo page that loads the [slug] demo song
β β
β βββ info
β β βββ +page.svelte info page
β β
β βββ song\[slug]
β β βββ +page.svelte dynamic song page that loads the [slug] song
β β
β βββ +layout.svelte layout file (applied to all pages)
β βββ +page.svelte index page
β
βββ storage
β βββ db.ts Dexie database (IndexedDB)
β βββ store.ts Svelte stores (state management)
β
βββ styles global styling
β βββ _colors.scss sass map with all colors
β βββ _index.scss fowards all partial SCSS files in this folder
β βββ _variables.scss CSS & SCSS variables
β βββ global.scss global styles
β βββ resets.scss style resets
β βββ typeface.scss typeface imports
β
βββ app.d.ts type definitions
βββ app.html main HTML
static
βββ audio audio samples
βββ icons web manifest icons
βββ typefaces typeface files
βββ app.webmanifest web manifest
βββ *.png favicons and icons
βββ og-image-1.jpg Open Graph image