Conversation Starter
Conversation Starter
An app that helps you start conversations. Stuck for something to say? Press a button and it pulls up a random joke to break the ice, a piece of stoicism to discuss, or an optimistic or poetic saying to lift the mood. Copy any of them to share.

- Download for Android on Google Play
- Use it in your browser as a mobile web app (installable as a PWA)
- Code: github.com/abulka/conversation-starter
What it does
Four buttons, one purpose: give you something interesting to say.
- Tell me a joke – a random joke to break the ice.
- Give me Stoicism – a stoic saying from Marcus Aurelius, Seneca and Epictetus to spark a deeper conversation.
- Optimistic Saying – a short upbeat line to lift the mood.
- Poetic Saying – a memorable line from poets and writers such as Tennyson, Dickinson and Mary Oliver.
Each press picks a new item and avoids repeating the one you just saw, and a Copy button puts the current saying on your clipboard so you can share it.

One app, three homes
Conversation Starter is built once with Expo and React Native and shipped three ways from the same codebase:
- an Android app on the Google Play Store, built and submitted with EAS
- an installable mobile web app (PWA) hosted on Firebase Hosting, so you can add it to your phone’s home screen from the browser
- a simple landing page at abulka.github.io/conversation-starter-website
Under the hood
The app is deliberately small: a single screen holding the sayings and a few buttons. It is a React functional component using useState hooks to remember the current text and the last item shown, so the random picker never repeats itself.
Here is the main flow in Plain Text Diagram notation:
Use Cases:
Sequence: Display a random joke
selectRandomItem(jokes, lastJokeNumber, setLastJokeNumber, 'joke') [App.js]
[do while (number === lastBlahNumber)]
-> Math.random()
generates a random number
< number
-> setLastJokeNumber(number: number) [App.js]
updates the last number used
-> setTextOut(item: string) [App.js]
updates the displayed text output
Sequence: Render the application UI
render() [App.js]
-> Button() [App.js]
[onPress: selectRandomItem(jokes, ...)]
displays the "Tell me a joke" button
-> Button() [App.js]
displays the "Give me Stoicism" button
-> Button() [App.js]
displays the "Optimistic Saying" button
-> Button() [App.js]
displays the "Poetic Saying" button
Technologies
| Description | Technology |
|---|---|
| Framework | Expo / React Native |
| UI components | React Native Paper |
| Icons | Material Community Icons |
| Clipboard | expo-clipboard |
| Android build | EAS Build |
| Web hosting | Firebase Hosting |
Feedback
Was this page helpful?
Glad to hear it! Please tell us how we can improve.
Sorry to hear that. Please tell us how we can improve.