Take a guess: How many times have you typed out your home address over the past year? It's a string of around 30 characters that takes perhaps eight seconds to write. Just thinking about it makes my fingers sweat.
But what if you could type your address with just three characters: @ad
. That's what makes text expansion apps so magical: they transform abbreviations into custom lines of text instantly.
Text expansion apps are like cheat codes for your most-typed phrases. Enter a phrase, and you'll be rewarded with a longer (or tougher-to-type) string. More characters, less effort.
But unlike cheat codes from video games, you get to pick the result. ;email
turns into youremail@business.com
, ,phone
becomes 555-867-5309
, and tylmk
unfolds as Thanks, and let me know what you think!
. Or not—each string could turn into any text you want. It's a superpower that morphs into what you need.
Today you'll learn how a text expansion app can trim time off of your typing through the power of saved snippets.
Why You Should Use a Text Expander
There are hundreds of words and phrases you type out multiple times during the week, often without even noticing it. It might be something simple like your company name or email address, or a more complex message like a sales pitch.
Sure, it only takes four or five seconds to type out your phone number. But if you do that 20 times per week, your minutes spent clacking away grows exponentially. That time adds up fast.
Of course, minutes-saved will vary from person to person. The screenshot above is courtesy of one of our customer champions at Zapier, Vicky. She uses a text expansion app to drop common responses and links into help desk tickets, so our users get answers fast. So far it's saved her 33.92 hours—almost a workweek of typing.
But you don't need to be a power user to see big benefits. Like a lot of productivity and automation strategies, text expansion is all about shaving seconds off of your most common tasks and racking up extra time. It's like comparing shorthand to word-for-word transcription: the former is faster when you stick to a system.
If you spend more than half the day with your fingers resting on a keyboard, a text expander will help you reclaim typing time that you can put towards more important work. Every raindrop fills the bucket.
Expanding Your Vocabulary
Before we get started, let's cover a few common terms so you aren't left scratching your head through this entire tutorial. You'll see these phrases or concepts used throughout your text expansion tool of choice, and this article:
Abbreviations are the codewords that you assign to blocks of text you type often (or "snippets"). Once you type one out, your text will instantly expand into the space your abbreviation once occupied.
Snippets are the chunks of text, code, or other info that you want to drop into your work via an abbreviation. You set it up once, and your text expander will link it to its abbreviation—and will paste it instead of your abbreviation whenever you type one.
Macros are dynamic bits of built-in syntax that you can use to do things like pull in today's date, place the cursor, paste text from the clipboard, or execute certain key combinations. We'll cover your macro options in-depth below.
A Delimiter is a character that sets your snippet into motion. It's like a trigger at the end of a string that, when typed, transforms your abbreviation into the associated text. Your delimiter can be something like a space, a tab, or a symbol, and they tell your app "Ok, expand my text now!"
All you need is a text expander app and a few minutes to write down snippets of text you type out often, and you'll start shaving seconds off your day almost instantly. There's a wide variety of text expansion apps: aText, TextExpander, TypeIt4Me, PhraseExpress, PhraseExpander, Breevy, and even the text replacement tool built into your iPhone. Each of them help you do the same thing: type less, and work faster.
Get Comfortable with Basic Features
Text expansion apps can be as complex or as simple as you want—it all depends on the snippets you create. Even if an abbreviation only saves you a couple minutes per week, it's worth the 20 seconds it takes to set one up. Two minutes saved each week turns into 2 hours saved each year, after all.
To get you on the path to complete text-expander mastery, let's cover the bare essentials—defining an easy-to-remember syntax and organizing your snippets. We'll also go over how macros make your life easier, and how you can customize your tool to sync and back up snippets.
Setting Up Your First Snippet
Most text expansion apps come with some built-in snippets. They're a nice starting point, but they'll only get you so far. If you really want to supercharge your workflow, tailor custom snippets and abbreviations to your typing style.
Start out by hitting the "New Snippet" button, which will open up a blank template to work with. For now, let's talk fundamentals.
On the left, you'll see every snippet—or the text that will expand onto your screen—that's already set up. When creating or editing a snippet, you'll see a large space for content. This is where you write the longer chunk of content that you don't want to waste time typing out. Our snippet content above is "Zapier makes you happier!"
You'll also see a field for an abbreviation. This is the shorthand phrase that we'll use to call up the longer snippet. For the example above, our abbreviation is zapier!!
. Each time we type that string, it will transform into "Zapier makes you happier!"
Simple, right? But let's rewind for a second: Because abbreviations are the heart and soul of text expansion apps, you want to make sure you set up really good ones. Here are some tips on how to write these crucial codewords.
What Makes a Good Abbreviation?
If the abbreviation for your snippet is long, complex, or tough to remember, you're going to waste time grasping for the right combination of characters. Make it easy on yourself by setting up short, simple, yet unique strings for your each phrase. These tips will start you down the right path:
Keep it Brief. Remember: Text expander apps are all about keeping your characters typed to characters produced ratio down. Chaining
@mybusiness-weekendhours
to11 a.m. to 6 p.m.
isn't actually all that efficient, right? Stick to the shortest abbreviations possible to maximize your efficiency.But Not Too Brief. Yes, your abbreviations should be easy to type and remember. But if they're too simple, you'll get into trouble. Using something like
site
for your company's URL is bad news, because it's likely to come up in common conversations. Plus, it's part of words likeopposite
andworksite
. Get creative: A code likezapu
for Zapier's URL is just as short assite
, and less likely to appear in normal text.Use an "Unlocking" Character." This is the special key or "delimiter" that unlocks your snippet. Pick a common character like
;
,'
,=
,%
, or$
to pair with your abbreviations, and stick it at the beginning or end of each code, like%email
orpricing%
. That way, you can guarantee that a string won't overlap with something you'd normally type. (A little advice: My favorite unlocking character is;
, since my pinky finger is already resting on the key as I type.)Go with Your Typing Flow. Don't contort your fingers into a game of keyboard Twister. For many abbreviations, building a great snippet is a matter of adding an extra letter. For example, you could add an extra
s
to getaddresss
, which would pump out your shipping info, or an extras
tothankss
to produce your email sign-off.Decide on a System. There are no hard-and-fast rules for text expander snippets, but if you want to memorize your abbreviations faster and save yourself headaches down the road, flesh out a system up front. It doesn't need to be perfect—just something you'll remember. It might be removing the vowels from your abbreviations, sticking
te
at the beginning of each string, or using different unlocking characters for different apps or environments. Just pick a direction and stay with it.
Fun with Macros
Plan text snippets are helpful for typing the exact same text every time. Macros, then, make your snippets dynamic. They can pull in current time and date info, string together different key combinations, and even grab info that's copied to your clipboard.
Here are the most common types of macros, and how you might use them in your text expanders.
Dates and Times
These macros pull in the current time and date in a format that you choose, so you can drop it into any snippet.
With certain apps like TextExpander, you can even add or subtract minutes, hours, days and months to or from those dates. That way, you can dynamically define things like meeting times and delivery dates.
For more on using date and time transformations, check out this tutorial from Smile, the makers of TextExpander.
Clipboard
This macro takes whatever's copied to your computer's clipboard (via the copy/paste function) and drops it into a snippet.
The clipboard macro is ideal for inserting things like links or email addresses into the middle of a string so you don't need to circle back with your mouse. For example, you could set up this snippet with the abbreviation ;tutorial
for answering help desk tickets:
Here's a tutorial that might make things more clear: [clipboard]
Hope that helps, and let me know if you have any other questions!
Your text expansion app will snag the tutorial link you just copied, and pop it into the message for your customer.
Cursor
This one's pretty basic, but it's incredibly convenient. The cursor macro places your cursor at any point of your snippet after it expands. That way, you don't need to pound on the left-arrow key to backtrack.
Here's an example: I have a snippet set up for HTML link syntax, and it drops the contents of my clipboard into the href
space, then moves by cursor in-between the two <a>
tags.
I can type out the linked text and automatically close the HTML tag without moving backwards with my mouse.
Fill Fields On The Fly
Static text strings won't fit every situation. To customize your message on the fly, use fields (aka "Fill-Ins"). They let you wedge personalized phrases, links, or multiple-choice options into the skeleton of a snippet.
Say you want to build the structure for an outreach email, but you also want the ability to add personal touches like the recipient's name and the name of their company. Fields are your solution: Set up a shell with your core email message, and add fields for the recipient's name, company name, and other parts of the email that need customization.
There are a few types of text expander fields you can tailor to your needs:
Text Fields
Text fields come in two varieties—single-line and multi-line. Both are straightforward: type in a string of text, and your app will pipe it into a predefined template. They're ideal for messages that need small tweaks based on context, like outreach emails or support responses.
You can choose a label for each text field, and if two fields share the same name they'll also share inputs (e.g. if I have two fields called "Name", and type "Jane" into one of them, both fields will be filled with the name "Jane").
Tip: If you only need one text field in your snippet, try using the clipboard instead. Just copy the text, then type your abbreviation to get a customized message without typing anything into a field.
Popup Fields
If you want to use a predefined set of options for your templates, try popup fields. They give you a dropdown menu of choices that can fill your snippets. Just point, click, and your text expander will insert the relevant info.
Popup fields don't provide as much flexibility as a basic text field, but for tough-to-type lines like addresses and URLs, picking from a list is your quickest option.
Optional Fields
It's also worth noting that you can make any text or popup field elective. Just tick the "optional" checkbox, and choose whether or not the field should be included by default.
From there, when your snippet starts to expand, you'll be able to pick whether or not the optional field is included; if you choose "not", the rest of your snippet will expand with a blank space where the optional field would have appeared.
Grouping Snippets
Groups are self-sorted categories of snippets that help keep different use cases straight. Beyond basic organization, you can pick special settings for each group—like the apps that the snippets work in, or if they expand after a delimiter. This lets you apply settings to an entire group of snippets without going through and editing each one.
It's worth noting, though, that grouping tools vary between text expander apps. aText (screenshot above), for example, has more options for things like delimiters and lets you set a universal prefix for abbreviations in a group. On the other hand, TextExpander (screenshot below) sticks to the basics and handles edits on a per-snippet basis.
Need some more at-a-glance organization options? Many text expansion apps let you override the default labels you see on the left-hand side, which means you can give more familiar names to long strings of text.
You probably won't need to customize labels unless your snippet count is in the hundreds, but it's nice to have the option.
Back Up and Sync Your Snippets
Once you get into a groove with snippets, you'll want to use them everywhere. Here's the good news: Most text expansion apps support some sort of sync, so you can tap into your abbreviations on any computer with the right setup.
Some apps rely on iCloud or Dropbox to keep snippets in sync, while others let you save your own databases in the cloud sync tool of your choice. TextExpander recently swapped to its own cloud-based solution, so you can browse and edit your snippets in their web app interface and share them with your team.
The best tools also keep local backups of your phrases just in case of catastrophe. And if you ever need to abandon ship and swim towards greener pastures, many options let you manually save your snippets and load them into another app. Or, you could always use the text expanders from the old app to add snippets to the new app a bit more quickly if there's no import/export option.
Search Your Snippets
Can't quite remember that new abbreviation? No worries: Set up inline search for your text expander, and you'll be able to pull up a floating search box that helps you browse through every phrase.
Just type in a keyword from your text string, select the snippet you want to use, and it will be automatically placed in your app. For easy access, you can set a keyboard shortcut that activates the search box.
Experiment with Advanced Features
Now that you're proficient in text expansion, let's look at a few of the more complex (and powerful) features that these apps offer.
Key Macros
Key macros let you insert a specific keystroke—like tab, directional arrows, or escape—into your snippet. Some apps even let you add modifiers—like holding down command, shift, or alt keys—so you can effectively have your text expander fire off keyboard shortcuts for you.
With the right key combinations, these macros put you in total control of any text-based app. Or, you could leverage them with the tab
key to fill out an entire shipping form with your info.
If there's a tricky typing combo that you use constantly to navigate an app, try building it with key macros, and stop contorting your fingers into impossible positions.
Scripts
For those who truly want to automate everything, many text expansion apps support programming languages like JavaScript, AppleScript, and shell scripts, which you can use to run basic functions.
To set a snippet to code mode, switch the syntax from plain text to your chosen programming language. From there, just provide your functions and the snippet should take care of the rest.
Honestly, building programs with these languages in a text expander could encompass an entire series of posts. But if you're interested in learning more, check out these tutorials:
Writing lightweight programs helps you get around limitations with a text expander's features, and if you have a goal in mind it's usually not too tough to piece together a working model. I'm no engineer, but with a little Google-foo I can dig up some templated JavaScript or AppleScript to accomplish what I'm after.
For example, I wanted to build a randomizer for a set group of GIFs in Slack. After a bit of searching, I found this tutorial, then copy-paste coded my way to a working snippet. Now, whenever I type the abbreviation ;upvote
, my text expander runs this program:
set values_list to {"https://media.giphy.com/media/Ev0ME6Es9lmdq/giphy.gif", "https://media.giphy.com/media/jQlqvHyk0W6WI/giphy.gif", "https://media.giphy.com/media/ySGufHXLnNsWY/giphy.gif", "https://media.giphy.com/media/uuBPu0ZORCFdm/giphy.gif"} as list
set the list_count to the count of values_list
set pick to random number from 1 to list_count
set generated_choice to item pick of values_list as string
return generated_choice
That abbreviation runs the script, which returns a random GIF from the list instantly.
There are many other non-ridiculous use cases for using scripts inside of a text expander. Here are some ideas and tutorials to work off of:
Use JavaScript to upper- or lower-case the text on your clipboard
Randomize responses, manipulate dates, and build HTML tables with JavaScript or AppleScript
Automatically grab an email recipient's name with AppleScript
Run a shell script to get info about your Mac
Nested Snippets
Sometimes snippets change. You might need to update your title, a URL, or the best time for people to reach you. With nested snippets, you only need to update one phrase, and it will propagate to your other snippets that include the original phrase.
Nested snippets work like the other fields we covered above: While you're setting up the content step, pick the "snippet" option from the insert menu, and choose an existing abbreviation. From there, whenever you expand an abbreviation, your app will place your text, check the contents of your nested snippet, and automatically pipe in that extra content.
For example, let's say you're constantly on the road for work. With a nested snippet, you can set up multiple boilerplate responses that pull in your current availability.
Hey %name%, let's hop on a call to discuss the details. This week I'm available from %snippet:,timez%
%snippet:,timez%
is calling up the abbreviation ,timez
and returning its content. While you're meeting with clients on the West Coast, set ,timez
to 9 a.m. to 5 p.m. PT
. When you jet over to New York, switch it to 8 a.m. to 3 p.m. PT
. No need to change your other snippets—they'll grab the updated version.
If you want to build a truly dynamic text expansion system, try placing snippets within your nested snippets. You can put snippets inside of snippets inside of… you get the picture.
Text Expansion Apps to Try
Now that we've laid a foundation, let's pick a tool for building our snippets. Most of these apps have pretty similar features, but some offer advanced options like JavaScript and snippet sharing. Most of the time, though, more power comes with a bigger price tag. And if you only need the basics, there's free tools to start out.
TextExpander (iOS, Mac, Windows)
Best for: Sharing snippets between devices and playing with JavaScript
As the namesake for an entire category of apps, TextExpander helps people create and expand snippets across devices and teams. It's got all the basic features, including organizational options like folders and labels, formatting choices like plain or rich text, coding languages like JavaScript, and syncing for your other computers and your iPhone.
If you're into macros, TextExpander has 'em: you can automatically place your cursor after expanding a snippet, perform certain keystrokes, insert the date and time, and drop in whatever's copied to your clipboard.
The app makes setting up snippets even easier by tracking what you type and suggesting abbreviations for phrases you type out frequently. Plus, TextExpander offers robust sharing so teams can swap snippets.
But those team-focused features come at a hefty price. Recently TextExpander switched from a one-time fee model to subscription-based pricing. Now the stand-alone service will cost you about $40 annually, and the package for teams runs at about $95 per user per year.
The team package lets you manage snippets and how they're organized for your entire team, but this isn't a purchase you should make on a whim. If your company uses TextExpander for everything, the time you save might dwarf your investment—if text expansion isn't a team-wide initiative, you might check into cheaper options.
TextExpander Pricing: For individuals: $4.16 per month (or $3.33 billed annually); for teams: $9.95 per user per month (or $7.96 billed annually); $4.99 on iOS.
aText (Mac)
Best for: Self-starters looking for power at the right price
aText shares a lot of features with its big-brother TextExpander: the app makes it easy to set up snippets, use fields, sync data between computers, and mess around with basic scripts.
The app comes preloaded with a few options, but aText really comes to life when you start customizing. Once you have a few snippets set up, aText can plug them into any app on your Mac.
So, what sets aText apart from TextExpander apart? The price. aText clocks in at one easy payment of $4.99—a steal compared to TextExpander's subscription-based model.
But it's not all sunshine and lollipops. If you go with aText over TextExpander, you'll miss out on mobile support, usage stats, suggested snippets and JavaScipt support. Plus, with a smaller app you're going to get less support than you would with a more established name. Weigh how much you're willing to explore on your own before pulling the trigger.
aText Pricing: $4.99
Note: As of April 2016, the Mac App Store version of aText is incompatible with Apple's El Capitan operating system. If you're running El Capitan, you'll need to download aText straight from the developer's website
TypeIt4Me (iOS, Mac)
Best for: Point-and-click snippets
TypeIt4Me is one of the original text expander apps, and it still stacks up nicely against its competitors after decades on the market. You'll find all the essentials packed into the app: simple abbreviations, macros, organizational options and snippet sync. Plus, it even offers an iOS app that turns your texting shorthand into comprehensible correspondence.
One cool feature helps it stand out: point-and-click expansion. Just right-click on the app icon in your dock (or click on the icon in your menu bar) and you'll be able to pick from a list of snippets that will slide in wherever your cursor is placed. It's a nice option for folks who don't want to catalog and memorize abbreviations for every phrase.
TypeIt4Me Pricing: $19.99 for the desktop version, $4.99 on iOS
PhraseExpress (Windows, Android)
Best for: Snippet management on Microsoft machines
With a stronger focus on enterprise-level customers, PhraseExpress turns your PC into a text-expanding machine. Their standard license offers the basic features you'd expect: snippet management, backup for your phrases, and the ability to use those phrases anywhere. You can also leverage macros and their "Document Generator" to build boilerplate documents with a few keystrokes.
And since PCs are their platform of choice, PhraseExpress has integrations with Outlook and Microsoft Word, which means your snippets will slot seamlessly into your work.
PhraseExpress Pricing: Free for personal use, $49.95 for a standard commercial license, $139.95 for a professional license
PhraseExpander (Windows)
Best For: Keeping tabs on easy-to-forget phrases
Doctors spend all day writing out complex medical terms and filling in standardized charts—shaving seconds off that busywork can be a big boon. PhraseExpander was built with those medical professionals in mind (but you can benefit, too.)
It offers the standard features like simple snippet management, backups, and macro options. But a couple aspects help it stand out—namely, the suggestions window that tags along as you type.
Whenever you start tapping out an abbreviation, PhraseExpander shows matching suggestions from your snippets in-line with your cursor. To expand any of those snippets, just hit shift. You'll never forget a tricky abbreviation again.
With a Professional license, you'll also unlock a robust set form options, complete with calendar, text, multi-select, and dropdown fields. Just fill in the blanks, and wait for the completed document to appear on your screen.
Even if there isn't an "MD" at the tail-end of your title, PhraseExpander's power-packed options might fit your workflow.
PhraseExpander Pricing: $59 for a Standard license; $149 for a Professional license
Breevy (Windows)
Best For: Individuals who straddle the Mac and PC worlds
Breevy is a no-frills text expansion app for Windows. It's super simple to set up basic abbreviations, and you can jump into more advanced options like macros and keystrokes after experimenting a bit.
But the coolest feature might be the ability to sync back-and-forth between Breevy on Windows and TextExpander on a Mac. That way, if you're using OS X at home and Windows 10 at work, your library of snippets is always up-to-date. Or, if you want to switch text expander apps, you won't need to re-create your snippets.
Breevy Pricing: $34.95
Texpand (Android)
Best for: Tapping out lengthy messages on the go
Text expanders aren't limited to traditional keyboards. If you use Android as your mobile OS, Texpand can save your thumbs from too much tapping.
In practice, it's more or less identical to the desktop counterparts: find something you type too often, log it as a snippet, and set an abbreviation. Whenever you key in that abbreviation, Texpand will drop the snippet into whichever app you're working with. You can also pick from dynamic values—Texpand's version of macros—which bolster your snippets with info like the current time or date.
If you're suspicious about the time-savings that a mobile text expander has to offer, no worries: you can try Texpand for free. It lets you designate up to 10 phrases; the pro version gives you unlimited snippets for just a few bucks.
Price: Free, $2.99 for the pro version
Alfred (Mac)
Best for: Light text expansion plus a bunch of other Mac-searching functions
Ok, so text expansion isn't Alfred's bread-and-butter. It's an app built around searching for files and launching apps on your Mac. But it does offer a text expander-like feature called "snippets", which lets you store and search for common phrases via Alfred's interface. The problem: They don't expand via abbreviations. Instead, you need to look up a snippet whenever you want to use it.
So why's Alfred on this list? Aside from adhering to the spirit of text expansion apps—saving you time via app launching and clipboard management features—they've been teasing a full-fledged text expander utility for their next release. Only time will tell if it can stack up against the single-focus tools.
Alfred Pricing: Free, but snippets require the Alfred Powerpack, which costs 17£ for a single-user license.
Interested in trying out a clipboard management app? Here are some of the best options for Mac, Windows, and iOS.
Text Replacement (Mac, iOS)
Best for: Getting started with simple text expanders for free
For a free and simple text expander tool, you don't have to look any further than the keyboard settings on your iPhone, iPad, or Mac. Open the Keyboard preferences, select Text Replacement on an iOS device or the Text tab on a Mac. You'll likely find a pre-built snippet for "On my way"; just click the + icon to add a new snippet (called "phrase") and abbreviation (called "shortcut").
This Text Substitutions feature is a basic text expander tool that only works with plain text—it doesn't include clipboard, scripts, macros, or formatting tools. It's just enough to get you started typing words and phrases quicker.
Text Substitutions Pricing: Free with iOS and OS X
Get Inspired: Creative Ways to Use Text Expander Apps
Now that you're a text-expansion master, let's put your skills into action. Different people have different typing time-sucks, but these ideas will get the gears turning for your first set of snippets.
Save time on common phrases. Rack up time saved by shaving off extraneous characters. Try these:
;ty
▸ "Thank you",;ntm
▸ "Nice to meet you".Spend fewer keystrokes on forms. Combine text expansion with key macros to breeze through signup and shipping forms. For example:
@signu
▸Mark [tab] Zuckerberg [tab] zuck@facebook.com
when you're signing up for a new app.Keep track of common URLs. Never go digging through your bookmarks again. Text expansion puts commonly typed URLs at your fingertips, so you can send them to customers or call them up in your browser faster. For example:
:zapm
▸https://zapier.com/multi-step-zaps/
Support your customers faster. Customer support can be a grind. But when you have text expansion on your side, it can save you valuable seconds on every ticket. Try these quick canned responses:
thanksf
▸ "Hey %name%, thanks for reaching out!",;helpd
▸ "You can find out more about that in our help documentation: https://zapier.com/help/".feature
▸ "I don't have a timetable for when we might release that, but I'd be happy to put in a feature request for you."
Search sites on the fly. Here's a neat Google trick: If you preface your search with
site:zapier.com
(or, insert your own URL), your search will be limited to results from that domain. You can use text expansion to tap into that shortcut quicker. Over at Macworld they use a snippet to expand an abbreviation intosite:support.apple.com/kb/
, so they can search Apple's help docs fast.Clean up your code. Even expert developers need to look up syntax and functions sometimes. With a text expander, your code snippets are stored behind a shortcut. Try these time-savers:
Set up an HTML document in 5 taps: just pair an abbreviation like
!html
with common tags like!DOCTYPE
,<head>
and<style>
Tackle CSS properties with awkward syntaxes by setting up a field-filled snippet. For the "background" property, your shorthand might look like this:
..background
▸background: %color% %image% %repeat% %position%
Run quick SQL queries with this tip from the engineering team at Emma.
Catch common misspellings. Save yourself some embarasment embarrassment. If you know that a word always trips you up, auto-correct it with your text expander. Some apps will even track what you type (or retype), and suggest snippets.
Make markdown even quicker. We love Markdown at Zapier. It helps you format your text with a simple syntax. And with a text expansion app, you can make it even quicker. For example: Use
**
▸**[cursor]**
to create a new piece of bolded text, or use]]
▸]([clipboard)
to link a string of text with the URL on your clipboard.Insert obscure symbols. If you're working with multiple currencies, or complex scientific formulas, use text expansion to drop them into your word processor. Try these:
;euro
▸ €,;sum
▸ ∑
What are some of your favorite time-saving snippets? Feel free to share some inspiration the comments!