You've successfully subscribed to I am Sven
Great! Next, complete checkout for full access to I am Sven
Welcome back! You've successfully signed in
Success! Your account is fully activated, you now have access to all content.
CoinDrop.me - Week 1

CoinDrop.me - Week 1

in

Yesterday we kicked off the CoStarting cohort in which I am a participant in with the CoinDrop project.

For a quick overview of what I intend to build, please check out my profile on the project on the CoStarting website here:

CoStarting
Starting Companies Collaboratively

Day 1

The Word List

After looking around the internet for a wordlist I may be able to use as a kickstart list for the word DB I will need to generate word triplets, I came across a few options, mostly from other developers, or as lists used by password crackers (John The Ripper, etc). One of the most comprehensive english word lists I found is this one with 466.000 words.

dwyl/english-words
:memo: A text file containing 479k English words for all your dictionary/word-based projects e.g: auto-completion / autosuggestion - dwyl/english-words

I had a look at the raw file, and quickly decided that this may be a bit too broad for my purpose. After all, the goal is to generate easy to understand, and easy to share triplets. However, if you look at the list, you will realize, like I did, that combinations such as

"abaciscus.cyanomethaemoglobin.lymphadenectasis"

would be possible, and that may not be the most user friendly combination.

The two alternate lists I found so far are one with 100k most common English words. But that includes "I", "He", "are", etc. That may not be a problem since I could imagine that actually being a funny address "i.are.he" :P

That wordlist is a few years old, and can be found here:

Wictionary top 100,000 most frequently-used English words [for john the ripper]
Wictionary top 100,000 most frequently-used English words [for john the ripper] - wiki-100k.txt

The second alternative is a noun list with 6775 words. It seems like nouns may be the most reasonable use-case. I think the best would be a combination of the two lists.

Most Common Nouns.

The Great Noun List - desiquintans.com
A list of frequently-used common nouns in the English language, delivered in a plain .txt format.

Thinking about the number of combinations I want the algorithm to be able to offer, the noun list with 6775 words would yield a total number of combinations of almost 311 billion. I think thats enough for now.

While I am writing this I am starting to think about the part of the algorithm that will have to generate the random combinations. Consider this project being super popular, and 300M random addresses are already taken 11M are still available. But say a simple pseudo algorithm like

var triplet = getRandomWordFromList().getRandomWordFromList().getRandomWordFromList();

while(checkIfTripletInDB(triplet) == true) {
	triplet = getRandomWordFromList().getRandomWordFromList().getRandomWordFromList();
}
// first triplet we cound that is not in the DB
writeToDB(triplet);

The odds to land on a combination within the 11M available ones is only ~3.66%. This would not be very efficient. So I will definitely dust of me knowledge of algorithms, and do some thinking on how to improve these odds to ensure a quick lookup time for users.

Day 2

Word Cleanup

Looking through the downloaded word list I noticed words with hyphens. E.g. Back-Up, which I would not like as an option in the triplets, so I did a quick clean up of all these words with excel.

Quickest DB

In order to get this developed, or rather prototyped quickly I decided to use firebase as the backend for now. The wordlist is uploaded to a realtime database in firebase already. Even though I would prefer to use their Firestore, I went with the Realtime DB since it can import JSON files.

So I downloaded the word list txt, transformed it to a csv file which I then converted to a JSON file using https://www.convertcsv.com/csv-to-json.htm

Normally I would write a quick python script to do any of these types of data manipulations, but speed is off the essence, and this was a one time thing.

 Today was a short one, but tomorrow we are all set to setup an angular app and connect it to firebase as our starter application.

Day 3

I started today with setting up an Angular project and play around with connecting it to Firebase. I have to admit, I am a bit rusty with it, it's been a few years since I last used it. But it will still be one of the faster options.

I came across this pretty neat project here on github which already has the entire authentication, login, registration, etc implemented and a bunch of other neat stuff I should be able to recycle to quickly get a MVP for CoinDrop off the ground.

jeroenouw/AngularMaterialFirebase
:fire: Full stack starter app with Angular 8, Material Design and Firebase (+ demo) - jeroenouw/AngularMaterialFirebase

Thanks jeroenouw.

I spend some time getting familiar with it, and connected it to my firebase account. After an hour or so I had it play nice, and had it roughly restyled to resemble CoinDrop.

Still a lot more to change, and then start to develop my own component which does some of what CoinDrop is supposed to do. But I am happy with this for today.

Day 4

Today started with me being a master procrastinator. Its not all bad, since I put most of that time into coStarting itself. But it got so far that I asked my cohort members what they think about me pivoting CoinDrop into coStarting itself as my cohort project. BUT NO...

like the cohort should, they provided their opinion, and Arqui put it best, and simple.

He pushed back on me "giving up" and challenged me to refocus and possibly adjust my scope. He noticed what I struggle with every day. I over engineer things. :P Call it perfectionism, or whatever you want. Somehow my brain does just not allow me to whip up the simples solutions to things, unless I force it to. So, thanks Arqui.

It took me till 7pm to finally sit down and work on this true MVP style. I looked at the starter project I had setup yesterday, and decided to just hack the functionality into an existing component. And what do you know after 1h I had the random triplet generator running.

Its anything but pretty, and don't even look at the code. But all that can be fixed once we have proven the interest in the project from actual customer.

There are definitely still some weird words in there which I am not sure I'd like as my BTC wallet address. But we will weed them out later.

A small victory! We are back on track.

Day 5

Like yesterday, got a bit of a late start to work on the project. But I did work on it. :)

I focused on the second part of the functionality for the users. Yesterday you saw me tie the frontend to the DB and create random addresses. I have not added any functionality yet to make them able to be saved in any way yet. But that part should be easy after the part I made today.

Reserve Custom Address

The core of the value prop which I intend to monetize is the ability to reserve a custom address such as "pay.me.money", or "send.me.millions". So I needed a form that takes the custom address from the user and checks with the database if that address was already reserved by someone else. If not, then the user could claim it. Right now the address will be stored together with the users email address to the DB without any other requirements. But I intend to put the paywal right at this point. The user will be notified if the address is available and presented with a popup to purchase and reserve.

I need to make sure there are no whitespaces or special characters allowed in these input fields which I have not done yet, but is on the list. I am also not in love with the UI yet at all, for obvious reasons. But that will be cleaned up later. Right now it was more important to get the core functionality in there.

Day 6

Still mostly ignoring how terrible the thing still looks, I wanted to focus on the payment integration today. At first I was considering using Stripe directly since I have some experience with their API from previous projects. I started reading into it and looking for sample projects I could use too speed up my development with. About 1h in, I realized that I have never used Gumroad myself yet. I am a big fan of @shl, the founder of Gumroad. So I decided to give it a shot. After signing up and realizing I could embed it easily AND configure it to be a Pre-Sale, the decision was easy.

Creating a new product is as simple as could be, and integrating it into your project not much harder. I did want to auto populate the fields in the gumroad embed widget automatically with the user email and coinDrop address they chose, to ensure I can later match them 100% between the gumroad payment system and by database. Check it out in test mode (test credit card). It checks the database if this address is already taken, if not it will reserve it for the email entered and allow the purchase.

I will have to work on the UX flow to make it a two step process. The payment form should only show once the address availability is confirmed. And I should also be able to hook into the payment-success event from Gumroad to store the newly reserved address only once the pre-payment authorization was a success.

Day 7

The last day of week one wrapped up with preparation for the weekly coStarting check in with my fellow cohort members, and unfortunately not too much else than that. I was not able to develop much on CoinDrop throughout the day. Nevertheless, at the end of the day it was amazing to see the progress of the other projects. You can have a look yourself here:

Looking forward to a productive second week.