Search

619: Svencodes

Download MP3

Sven Neumann aka Sven Codes talks with us about SudokuPad, developing a cross-platform app, integrating new puzzles and features, the benefits of being easy to use, building a community, and monetizing an app while not upsetting your user base.

Tags:

Guests

Sven Neumann

Web · Social

Creator of Sven's SudokuPad.

Time Jump Links

  • 00:37 Introducing Sven Neumann
  • 03:19 How did you connect with Cracking the Cryptic?
  • 12:45 What is SudokuPad?
  • 16:02 Why is the pen tool off by default?
  • 20:51 Overview of how the app works
  • 32:33 The future of SudokuPad
  • 45:14 Sudoku variants and popularity
  • 54:29 Ease of use is a huge benefit
  • 01:01 How do you support new puzzle formats?

Episode Sponsors 🧡

Transcript

[Banjo music]

MANTRA: Just Build Websites!

Dave Rupert: Hey there, Shop-o-maniacs. You're listening to another episode of the ShopTalk Show. I'm Dave--Pointing Pair--Rupert. With me is Chris--X-Wing--Coyier. Hey, Chris. How are you doing today?

Chris Coyier: Ooh... Chris--the Candidate--Coyier.

Dave: Chris--the Candidate--Coyier.

Chris: [Laughter] Very special show today. Kind of in our series of people that make cool, interesting apps for somewhat niche communities. We have a guest on here, Mr. Sven. How ya' doin'?

Sven Neumann: I'm doing good.

Chris: Sven Codes.

Sven: I feel like I need a peppy intro as well, and I don't have one.

Dave: Oh...

Chris: [Laughter]

Dave: Well, unfortunately, the remaining ones are not safe for work, like "Naked, Single, and--" so... [Laughter]

[Laughter]

Dave: So, I apologize.

Chris: That's fantastic.

Dave: I ran out of good material.

Chris: I have a feeling Sven is going to have a lot to say in this episode, which I can't wait to hear. Some stories that I haven't heard about some niche stuff that I just am very excited to hear about. But let me tee it up for everybody.

It was actually kind of like early pandemic. There's kind of a famous Internet blog from Mr. Jason Kotke, kotke.org, and he links up all kinds of interesting things. I remember the post.

He said he found he was cruising YouTube and found a YouTube video called "The Miracle Sudoku." I even click onto it now and it has some four million views or something. He was just captivated by some British guy kind of slowly -- I'm sure fast by some degrees. He thinks out the logic and talks about what he's thinking solving a Sudoku puzzle that only had two -- what I now know to be called -- given digits in a puzzle. It really is fun to watch because of the fellow in it is rather charming in a nerdy kind of way. It's just fun to watch somebody's brain work, I guess. Just kind of an interesting thing.

I really enjoyed it. And somehow, since that day, now many years ago, I just hit that. I smash that subscribe button on YouTube, and god if I can't go a day without watching one of those guys solve a puzzle. It's just very satisfying to me in some way. I've become kind of a fan.

The show is called Cracking The Cryptic. In the show, every single episode (for the most part, unless they're doing something weird like playing some different video game or something), if they're doing a Sudoku puzzle, it's on a piece of software that's very custom-built to the logic and idea of solving a Sudoku puzzle, particularly variant Sudoku, meaning it's not just a grid of numbers, which traditional Sudoku is. Although, I'm sure the app works great for that. But there tends to be additional stuff.

There's stuff called cages, which are dotted lines, and they're with numbers. Sometimes there are numbers outside the grid. Sometimes there are little shapes and things inside the grid that represent different rule sets.

These types of variant Sudoku, it seems like, "Oh, it's going to make Sudoku even harder?! No thanks!" It doesn't necessarily. It makes it more interesting to me. It makes each puzzle kind of a journey of what it's going to be.

In the videos, they kind of have to cover what the ruleset is for that particular puzzle to the point where everybody watching understands it. Then they get into solving it. But they really need a piece of software to be able to do this, and I don't know where this came from. But Sven, today on the show, you built that piece of software and I just can't wait to hear the story of how that came to be.

00:03:54

Sven: Actually, I think that particular video was not running on my software yet because I wouldn't be surprised if that was also the video that I first solved. I'm not 100%. I should really go back to it.

But it was around that time that I came across them, and probably in a similar way as you guys. And I don't know. I have a weird ear for this sort of thing, and I guess just in between the lines, I kept hearing them complain about things in the software or announcing things would come.

Then I noticed they've been announcing that for a while and it still hasn't come. So, eventually, when I see a thing that does 98% of what you want it to but not the extra 2%, I would feel compelled to make it do the extra 2%.

[Laughter]

Sven: Actually, I sent them a message on Twitter and said, "Hey, you know, if you're interested, I could do the thing and add the thing that you want." Right? Simon responded.

He was like, "Oh, that would be great." So, I think I put a prototype together over the weekend. And it's pretty much the one I've sent you in CodePen. It was basically just a clone of the existing software they were using, which was originally built by a fellow called Sam.

I think what had happened at the time, he just wasn't around to do the things that they were waiting for. And at the time, I was -- I think, yeah, it was sort of the beginning of COVID, and I was in a work-from-home situation at the JavaScript game studio I was working at. But they were actually winding down their offices in the country where I am stationed.

And so, every weekend, I was working on SudokuPad. Within a couple of weeks, I basically had it far enough along to say, "Hey, Simon, you guys can use it and it does this extra thing." I don't even remember what the original extra feature that it did.

Chris: Oh, you don't even remember what the feature was? Hilarious.

Sven: Yeah, I don't remember now.

Chris: There are a lot of features, we'll say.

Sven: Yeah, if you compare it to the original software. Yes, of course. They wouldn't be able to go back to it now. They got used to things, you know, certain ways of doing things. But it was interesting because it was completely reversed engineered, just looking at the JavaScript, trying to figure it out.

It was initially just pulling. The data was just, you know, you hit an ID and it spat out this Base 64 encoded bit of data. I just pulled it off of their Firebase server, basically.

Chris: Mm-hmm.

Sven: And just reverse-engineered the format of these puzzles, so on and so forth.

Chris: Oh, okay. So, a puzzle is some kind of piece of data. I hadn't really quite thought about that. Is it like a big chunk of JSON that describes what's happening in the puzzle?

00:06:39

Sven: Sort of. Initially, in those days... Well, actually, they had the original puzzles at the time were in some sort of Firebase database. But most of the puzzles created by the community weren't actually in this format because this particular tool, the tool they were using, also had an editor. But the person who made it asked them not to share it with anybody. So, only they were using it.

Every puzzle they used, they actually had to rebuild from scratch in this other editor. So, it was already, like, that was the beginning of the weirdness of the whole thing.

Chris: Oh, my gosh.

Sven: There was, I think... Yeah, there were basically two major other tools at the time. One called F-Puzzles and the other one called Penpa. That's what most people were doing building puzzles in.

I reverse-engineered the format of their tool. Yes, at the time, the puzzles were basically just really long URLs. The data was in the URL, so it was Base 64.

Chris: Oh! Geez!

Sven: LZ Compress. JSON, basically. And a lot of these URLs were a couple of kilobytes long. Over time, that was causing all sorts of issues, as you can imagine.

Chris: Pretty long URL.

Sven: Yeah.

Dave: I wish I would have known that. I would have been so smart-looking because I could just decode the Base 64 and be like, "Oh, I guess that's 987532."

[Laughter]

Sven: In fact, the URLs you see nowadays, I really just started doing that late last year where I said, "Okay, we're having a lot of problems with these long URLs." Every time I see one of these long URLs, I just put it in a file and give it an ID and give you that URL back, right? Because people would put things into a URL shortener. That was the primary way of sharing these puzzles. In fact, both of the editors, I think, had buttons to literally just give you a short URL directly.

Chris: A short URL? Yeah, okay.

Sven: A couple of years ago -- What was it called? Git.io? -- the GitHub URL shortener went down. It took thousands of puzzles out of circulation.

Chris: Oh, no!

Dave: Oh, man!

Sven: Puzzles we have no record of that just disappeared from the face of the Earth.

Dave: Ugh!

00:08:42

Sven: There are a lot of things like that going on. I'm like, "That's terrible. This shouldn't be happening." You know?

But anyhow, we just skipped three years of evolution there. The initial launch and when I went full-time on the project, I talked to Simon Mark from Cracking The Cryptic.

Chris: Mm-hmm.

Sven: I had hoped (at the time) to take it over because they had a mobile app out with a studio in Seattle from Studio Goya. I had hoped, like, "Hey, this app has nothing to do with the thing you're use in your videos. It's all kind of weird." My plan was to sort of say, "Hey, maybe I can take over from Studio Goya and do mobile apps with you and earn money that way while we were running the website and have the free tool there."

That didn't quite work out that way. The initial thing was really just like, "Oh, over three months, I'll do a very quick sort of proof of concept app. We'll just take exactly what's on the website. We'll throw it in a mobile app." Basically, the difference being that you can save your puzzles locally and play them on the plane and so forth.

Chris: Mm-hmm.

Sven: I released that early on, and that's literally still the only app I've made so far, so it's been carrying the whole thing. That's the only income (right) for the site because the site itself is free.

Chris: The site is free. The apps are paid. Like if you download it from iOS or something.

Sven: Yeah. But the apps are basically... the problem is now the apps are actually quite out of date, so they're struggling with the feature set. I had some problems because the apps are completely the same technology stack, so it's all JavaScript, CSS, HTML.

Chris: Mm-hmm.

Sven: And the apps run the same way as the website, which means all the data is stored in local storage.

Chris: Hmm...

Sven: Which behaves very strangely in certain ways.

Dave: Can get flushed, unfortunately, huh?

Sven: Not just can get flushed. Updates wipe it on iOS, which I hadn't known at the time. So, the first time I did an update, a big outcry, "All my puzzles are gone! I had 300 puzzles!"

Chris: Oh!

Sven: I was like, "Oh, darn." The problem is, I couldn't update without doing it again.

Dave: Mm-hmm.

Sven: So, I got very shy about updating it. Then the more sort of the longer it took for me to update, the more other things came in the way. Now the app version, especially on iOS, is like two years out of date.

The only reason it still sort of kind of works is because all the links pass. I had the foresight, thankfully, to do that. All the links basically pass through a little interstitial page to go into the whole deep linking. I don't know if you're familiar, but you can make an app. You can register an app to just... If you go into a particular URL, it loads the app instead of the Web browser, right?

Dave: Like SudokuPad://

Sven: Yes, something like that.

Dave: Some ID or something.

00:11:28

Sven: I think it's sudokupad.svencodes.com because I didn't want to risk it hooking the full domain, right? Basically, what happened over the years then is that code that sits there actually re-parses the puzzle and re-encodes it to make it backwards compatible because, over the years, things got into the puzzle that exposed bugs in the app and would screw up the app.

For example, there was styling information that would overwrite global styles. You've got a cage, for example -- you mentioned the cages earlier.

Chris: Mm-hmm.

Sven: If you got a cage that was invisible with a transparent color, suddenly all your other puzzles also would have no longer visible cages because it overwrote the global styling in the mobile app.

Chris: Oh, just one puzzle that you're not even playing.

Sven: Exactly.

Chris: Had some styles. Oh, my god.

Sven: Exactly. As soon as it generates the thumbnail within the app, it would load the puzzle, overwrite the global styles, and mess the whole app up. Right?

Chris: I see. Yeah. Got to scope those styles, baby.

Sven: Yeah, so I'm basically decoding the puzzles, looking for cages without styles, and artificially add and make them all black lines. That's just one of the many things it does.

Chris: Okay.

Sven: That's just one of the many, many, many little nooks and crannies of weird code that deals with backwards compatibility and this whole weird tech stack.

Chris: Sure. That's a little in the weeds. Let's paint a little bit more of a picture here. You open SudokuPad, and you see a grid. There are nine columns and nine rows. That's the traditional Sudoku thing.

But the point of this app existing is that you need to draw more crap onto that grid to accommodate the puzzle, little circles and dots and dash lines and numbers and all kinds of stuff. You have some work ahead of you to kind of render what that puzzle needs to be.

Then it also needs presumably the answer to the puzzle in there somewhere, so you can know that if you did a good job or not. And then you need to build in all the interactivity of how people can deal with the puzzle. So, you have lots of jobs. This app, despite it looking a little simple, is probably anything but. It's probably quite the complex piece of logic, right?

00:13:40

Sven: Yeah. The selling factor for it is usability. What sets it apart from the other tools I mentioned earlier, which people used to create puzzles. The reason why people don't like to solve puzzles in them in usability.

Usability is not something that you think of when you're building something for fun or open-source or as a hobby, especially when it comes to, let's say, usability for touch screens or different device layouts - something like that, right?

Chris: Mm-hmm.

Sven: My focus was very high on usability, making the tools work. I stressed very hard over hotkeys and making buttons work and things like that.

Chris: That does seem like a very, very big deal. I have used some really shitty Sudoku apps in the past and have been underwhelmed by them. It becomes less fun to do the job. I'd rather use a pencil instead anyway because the app sucks so much.

It does seem like that was a big deal with this app. When you watch Simon and Mark do it and their proficiency in using your tool, you're like, "Dang! This is excellent!" So, for example, they could be like, "Oh, the 3 is in one of these three squares," and they either drag their mouse across the three squares and just presumably hit... You can't see their hands in the video, but they just probably hit the 3 key on their keyboard, and it puts the number in those three things.

The fact that you could so easily select all three of those things, just that little detail is a pretty big deal. Imagine using the software and you have to click each one and then unclick it. Just that little one feature -- I'm sure there are 100 features like that -- just that one would be enough to not use or use an app. It would be such a big deal.

Sven: In fact, I think there are at least five different ways of changing which tool you're currently using. The reason for that is partially because of all these other tools, because one tool would use spacebar to change. Then I said, "Well, I don't want to cycle through all the tools. I want to have shift-spacebar to go the other way." You know?

Chris: Mm-hmm.

Sven: But then I don't even remember if it's page up, page down - or whatever. Then there was the convention of ZXCV, you know, the bottom row on the keyboard, selecting the tools directly, so it supports that.

Chris: Oh, really?! You can just put your...?

Sven: Yeah.

[Laughter]

Chris: Down there?

Sven: I don't even know. I don't even know all the different ways. But of course, my tool didn't just have four tools. It has additional tools, which I implemented as a sort of kind of plugin infrastructure. You have the color tool, but there were other tools which most people don't use.

00:16:02

Chris: I was going to ask you about that, too. Let's do it. Let's get into the weeds a little bit.

For example, there is one where you can draw a line because some puzzle rulesets have it... Literally, it's part of what you're trying to solve is the rule will say, "Draw a line that starts in column one, row one, and ends in row nine - or something - but only moves orthogonally - or something like that." Well, how do you draw that line? Well, in other software, you just say, "You can't," or - I don't know - "Print it out and do it with a pencil."

But your tool has what's called the pen tool in it. But I was always curious about this because it's never really been covered on the show. Why is it off by default? You know what I mean? You have a tool that can do it, but it's just not there.

Sven: I need to change that, actually. I need to change that. Again, this is sort of historical because the original tool didn't have it.

Chris: Hmm...

Sven: Most puzzles don't require it. One of the plans I had for a long time is I need to let the puzzle setters to indicate to the app which tools would be required.

Chris: Oh...

Sven: For example, there is a killer cage calculator. And it doesn't make sense to show it.

Okay, let me step back a little bit because I think we're kind of leapfrogging because one of the problems is that these are not Sudoku puzzles. If they were Sudoku puzzles, it would be easy. They're not only Sudoku puzzles, so the app--

Dave: Good point. Good point.

Sven: --really can't rely on them being Sudoku puzzles. So, it cannot rely on them being 9x9. It cannot rely on them using digits 1 through 9.

There's probably half the codebase is basically all workarounds trying to figure out what's going on. Even to know where the grid is itself because there might be elements that are outside the board.

Chris: Yeah. [Laughter] Those puzzles where you have to find the grid are so mind-bending to me.

Sven: But not even that. Puzzles that have elements outside the board to indicate things.

Chris: Oh, sure.

Sven: You know, "Oh, that...." You know? The problem is the app... the original tools creating these puzzles had no way of specifying these things - or not all of them had.

My app doesn't actually accept that information. It basically looks at the visual data. It's more or less a picture, and then it tries to figure out what the picture means, which is really tricky.

For example, for the longest time, I was trying to figure out certain rules from parsing the text, so there's a little piece of text describing the rules. I said, "Ah, if the text has the words 'knights move away' in it, then I can know that that's probably a rule."

Chris: No fricken' way! You look for the text "knights move away" in the rule.

Sven: I used to.

Chris: Oh, my god.

Sven: I used to, and I'll tell you why I'm not doing that anymore.

[Laughter]

Dave: Because I don't know what a knight's move is. [Laughter]

00:18:41

Sven: One of the problems is obviously if the rule is something like "All digits and knights move away," right?

Dave: Yeah.

Chris: Sure.

Sven: It's easy to tell that to a human, especially if those pieces are far apart, like short of a modern large language model to parse that.

Chris: Yeah. This is a knight's move puzzle but it only affects odd characters. That's a different sentence.

Sven: Exactly right.

Dave: Yeah. Wow.

Sven: I basically would go through a list of about 4,000 test puzzles I had, and I would apply a regular express to them until I got most things correctly. For a while, that was fine. Then after a time, I was noticing some performance issues. Then I was digging into it. It turns out that my little fragments of regular expressions that I was pushing together resulted in 46 kilobytes of regular expression being executed.

Chris: Oh...

Dave: Gosh, Sven!

[Laughter]

Sven: Apparently, that slowed the browser down quite a bit.

Chris: Oh, yeah. I might guess so. That's wild.

Sven: Yeah.

Chris: Not to mention they're known for being a little fragile, right?

Sven: Exactly. It was still not complete. It was just like every time I found a case, I added something to the regular expressions to handle it.

You know what? I would have been better off manually going through the puzzles and just clicking a button and marking them. [Laughter]

[Laughter]

Dave: Wow! Wow!

Sven: That's the evolution. That's part of what I enjoy about it. I'm not a puzzle guy. I'm not a product guy. I'm not a business guy. I'm a code guy, and I love programming. I love JavaScript.

Chris: I was so curious about that. You're not even a puzzle guy? You don't even do these puzzles?

Sven: I test, right? But that's the thing, right? I get to the point where I test, and a play a lot.

Chris: Yeah.

Sven: I will just do simple puzzles quickly to make sure I haven't blown anything up after I release a new update.

Chris: Right.

00:20:32

Sven: I don't know if you guys looked at the version number, but it's currently at version 0.528.0.

Dave: Oh.

Chris: Okay.

Dave: A couple of... [Laughter]

Sven: There are only 528 versions into pre-release.

Chris: Yeah.

[Laughter]

Dave: Almost there. You're almost. You're almost out there.

Sven: Yeah.

Chris: Yeah.

Sven: I have ... issues.

Dave: No breaking changes, so you're fine.

Sven: Yeah. Let me give you an overview because I think we haven't mentioned that yet. The renderer is actually pure SVG.

Dave: Oh, wow. Okay.

Sven: There are a couple of ways of going about these things nowadays. You can do HTML. You can do SVG. You can do canvas. Those the main ones, right?

Dave: Yeah.

Sven: The very first prototype was actually I started with some HTML for just the grid and the digits and all this stuff.

Chris: Right.

Sven: You could do a lot of the line drawing with HTML as well if you get funky with the CSS. But then I think... I don't remember. I think it was mostly I wanted to have something that looks good on different screens and different devices, works well.

Chris: Mm-hmm.

Sven: And it was partially also, like, do it quickly, right? Like prototyping stage. I can just generate an SVG and it'll be quick.

Chris: There are a lot of diagonal lines and stuff. I don't know. SVG seems like the right way to go here - anecdotally.

Sven: Yeah. For example, one of the editing tools uses canvas, and they have a problem where it basically just re-renders everything 60 times per second, and your laptop will basically overheat.

Chris: Oh, my god.

Sven: And your battery will drain when that app is open. In the meantime, people have created browser extensions to make it only re-render when something changes - and stuff like that.

Chris: Wow!

Sven: Yeah.

Chris: They hacked the canvas rendering loop to slow it down?

Sven: Basically, yeah.

Chris: Oh, my god.

Sven: Of course, it's very difficult because, in a canvas render, it's very hard to access what's inside. Right?

Dave: Mm-hmm.

Sven: You can't just look... You can't just open your def tools and have a look under the bonnet. With the SVG one, it's a lot easier. You can just right-click on it and, like, "Oh, okay. There's a box here," or "There's a line here," or whatever.

That was a decision I'm actually quite happy about. There have been issues. I have several Chromium bug reports since I started this. [Laughter]

Chris: Hmm...

Sven: It's apparently pretty good at finding bugs in Chromium and Safari. Yeah, their filter implementations--

Chris: Don't doubt it. Don't doubt it. So, in the puzzle... Maybe this is too specific. If it is, feel free to go down the path you were already going. But I'm fascinated. It doesn't even assume a 9x9 grid.

Sven: No.

Chris: But there's not structured data that says, "Oh, actually, this puzzle is 12x12." That doesn't exist? There's no data that says that?

Sven: There's a grid that can be 12x12. For example, there's a puzzle. If you go to the app on the homepage, literally that page is hardly unchanged from before I released it. This was really for people to test the app.

If you go to justsudoku.app without a puzzle, that's a very, very old page, and those puzzles were basically for the testers at the time.

Chris: Mm-hmm.

Sven: If you go down to I think it's the fourth one, yeah, called "Partial Coded Killer," that's one of those puzzles where it has a substitution cipher, so it has letters in the grid. Then it has a little 5x2 or 6x2 area with the letters and little boxes next to them where you can put in digits. You can say, "Ah! A is a 1 or a 2." Right?

Chris: Yeah. This is such a niche thing.

Sven: Yeah.

Chris: I've never seen this. But your thing supports it. How?

00:23:56

Sven: Yeah, so this is technically... Any human looks at this and says, "Okay, this is a 9x9 puzzle and has something on the outside." But the data says this is a 9x11 puzzle. My tool has no way of knowing that these boxes on the side are special, right?

Chris: Hmm...

Sven: That duplicate sets are suddenly allowed because, obviously, the A can be a 1, and then there's a 1 in row one, and then there are two ones in that row. What's going on? Right?

I had to get pretty clever over time to kind of try to look at the data and try to guess what it means. The moment you do that, then somebody does something different with the data.

Chris: It's not a data format that you invented either, right?

Sven: Exactly.

Chris: It's bastardized.

Sven: Nobody has invented it, really. It's not written down anywhere.

Chris: You should write it down. You should... [Laughter]

Sven: But the thing is I don't want to specify it because a lot of the creativity that's come out of the community has been because the data format has been so lax. For example, one thing my code did, which is a big no-no if you’re a professional programmer, it basically forwarded a lot of properties and didn't really analyze or filter them properly. A lot of the JSON just gets stuffed into the SVG elements on the other end.

That meant somebody independently created an import tool from the Penpa format, which is very, very different from the F-puzzles format. My tool can import F-puzzles, so they create F-puzzles data from the Penpa tool. But the Penpa format has much more capability than F-puzzles.

Chris: Hmm...

Sven: F-puzzles, for example, the lines always go to a center or to the edge of a cell not arbitrary positions and things like that. But he could do that because my system was so forgiving that it just accepted the data and pushed it through. Then he just, "Well, I can just now render arbitrary data," and I've seen people draw background images just with lines, by basically injecting SVG data (more or less) without going through SVG.

There's stuff out there that I don't understand how it works. I can kind of decipher it, but it'll take me half an hour. I'm kind of super happy that it worked out that way because it makes it more interesting and it makes it... The community owns it in that sort of weird way. It's like a modding thing almost.

Chris: It scares me a little bit, as a programmer, but I do like that you're like, "I'm going to intentionally be flexible because I'm honoring the creativity of these setters." That's kind of cool. I mean every bone in my body says, "Too bad. We're going to have a data format. It's going to look like this and you're going to use it." [Laughter]

00:26:25

Sven: Most of my work is backwards compatibility nowadays. I'm currently working very hard on creating a database. These are not in a database.

Dave: Hmm...

Sven: They are currently literally files on the server. The ID is just the file name. Because I used to deploy to Firebase, it used to be in the Git repo. Eventually, Git status took over five minutes. I'm like, "Wait a second. This isn't right. I can't do this. This doesn't work for me."

Chris: Are they enormous? What's the size of a puzzle?

Sven: No, but there are over 100,000 of them now.

Chris: Oh, my god.

Dave: Oh, that'll do it. Yeah.

Sven: Yeah.

[Laughter]

Sven: Yeah, Git doesn't like that apparently. In fact, I spent all weekend purging all the history from Git because otherwise, the repo was just unusable. It didn't matter if the files were there.

Chris: Is it private? I really want to see one.

Sven: It's currently private, yes.

Chris: Okay.

Sven: It's weird because it's a commercial product, so I don't officially open-source it.

Chris: Right.

Sven: But the code isn't really minified either, so the code that's on the site is the code I have locally, so people can literally save it and have the local version running if they want to. I would say, "Hey, it's still my code and you're technically violating copyright." It's more like I don't want somebody else to just take it and make an app out of it, somebody with a bigger budget, that kind of thing.

Chris: Right.

Sven: My dream would be to open-source it if my Patreon would support me and I wouldn't have to sell it as an app, right? I feel like that would be the best thing for the community as a whole. But we've been managing so far. Like I said, the code is not exactly closed source.

Chris: Mm-hmm.

Sven: The repo right now is probably not worth looking at either.

Chris: So, there are 100,000 of them, and nobody has done... These aren't written by hand, but they're also not made by a tool. I don't understand.

Sven: When I say 100,000, there are 100,000 of these short IDs. I call them short IDs. It's basically these shorted URLs.

They result around 47,000 unique puzzles. There's a lot of duplication. There's a lot of noise going on where people press buttons twice. I don't do any validation on my end, and so on. That's the work I'm currently doing is to clean that all up.

One of the questions I've been asking myself is, "What is a puzzle?" because I want to have a group of these bits of data join together into one puzzle, a puzzle that's under construction where people add things, where they maybe change the title or where they add the solution at the very end or where they make a small fix before they release it.

Those all things should be under one umbrella that represents one puzzle, the history of that one puzzle. And I'm actually talking with some mathematicians from a university in the States to try to figure out an algorithm that kind of determines the difference between one puzzle and the next in sort of a vector space. You know what I mean? Saying, "Oh, these two puzzles are this similar, and these two puzzles are really different."

There's a lot of this sort of data science stuff going on that I also am very interested in. As you can imagine, a lot of the people are math geeks. A lot of the people are programmers as well but are into puzzles. There are a lot of mathematicians in the audience, right?

It's kind of a weird place because I'd love to be in the video game industry, but I can't really claim that title because I'm not making the puzzles. It's more of... That's why I called this SudokuPad. It's like a notepad. It's a word processor, and people are loading their own puzzles into it and use it to play them.

00:29:44

Dave: I think that's the coolest part about it. It's not just a Sudoku app. It's a tool. It's an app that helps you make a Sudoku to give somebody to play.

Chris: Kind of. But we didn't quite cover that, right? Let's say you're Phistomefel. Do you make the puzzle or Phistomefel emails Sven and you make the puzzle?

Sven: No. Phistomefel will go to a tool like F-puzzles or Penpa. Those are the main two.

Chris: Mm-hmm.

Sven: There's also a tool called Sudoku Maker. That was built very recently. And Sudoku Maker is unique because it was built in the SudokuPad era, and it doesn't actually have a way of playing the puzzles. It just has an "Open in SudokuPad" button at the top, which I very much appreciate.

Chris: Oh, that's nice.

Sven: Yeah. There's also Sudoku Studio, which was sort of the big open-source project that was started a long time ago.

Chris: It's kind of an opportunity for you, though, to make a tool that is....

Sven: I should, but right now... Okay, so right now what I'm really working on is to turn SudokuPad (the website) into an actual place to find puzzles because there's no discover.

Dave: Yeah. Yeah.

Sven: Right now, you have to have the link to a puzzle that I don't necessarily know exists. That is a big problem in the community.

For example, my traffic on the site, I have about 40,000 unique users every day. But month over month, about 60% of the users are new, which means 60% of the users leave.

Chris: Churn city.

Dave: Oh, wow. Wow, wow. Yeah.

Sven: Exactly. My traffic, while it's going up just a tiny bit every month, it's been literally a straight line with a slight angle since three years.

Chris: Mm-hmm.

Sven: And that's because of that churn. The reason is because they go, they play their puzzle, and then a lot of people don't know of any other puzzles. There are a lot of YouTubers that use my app. There are dozens of them now. The Discord is a big place, but Discord is not where people go unless they already know about it.

What I'm working on is I want SudokuPad to become sort of the YouTube of puzzles. I want the puzzle setters to go there and publish their puzzles as a channel. I want ... to have a channel of the puzzles they play on their videos.

Chris: Oh, that'd be great. A homepage for the app that showed the ten coolest or the trending puzzles that day. I mean you know. You know I work on CodePen.

Ooh... I forgot to mention that. You mentioned that the first demo of it was on CodePen. I didn't know that when I emailed you. I had no ideal. I just thought it was an interesting story. I'm like, "I'm sorry. You used my app to build your app? At least the first version?" I'm like, that's so cool!

Sven: I love using CodePen for prototyping and quick things like that. I haven't used it in a while now but, in those days, I used to... I had my whole little framework where I would have multiple Pens that were libraries that I loaded in. I worked on my free card game back in the day, and a lot of it in CodePen, a lot of the prototypes there.

Don't look at my account there. It's a total mess of just abandoned prototypes. It's not really beautifully curated. [Laughter]

Chris: Nah... so is everybody's. You know it's just the way it is. But I'll just say, one of the smart things we did was putting trending, cool stuff on the homepage of the app. We've made it a community thing. I would offer that as a suggestion. Having the app have some kind of homepage that shows you the trending puzzles would be kick ass.

00:32:57

Sven: Well, the big thing right now is to have user accounts. Step one, user accounts.

Chris: Ah, yeah.

Sven: Right now, what is the legal situation of puzzles? If I want to show 1,000 puzzles, they're not my puzzles. I didn't make them. I don't have any rights to them.

Dave: Right. Right. Right.

Chris: Yeah. Fair enough.

Sven: Many of these puzzles are commercial projects that aren't available for free. There are people who sell these behind paywalls. There are people who sell them on Etsy as PDF files.

I got an email from a guy who asked... He's kickstarting a puzzle book, and he's asking if that's okay to link to my site for the puzzles. They're cryptic books. All the links go to my site for playing the puzzles. They don't want people to play those puzzles without buying the book, so I have no good way right now to say--

Chris: God, that is complicated.

Sven: Yeah.

Chris: Yeah.

Sven: Exactly, so part of it is also to sanitize the data set. I want accounts for all the setters. Once they publish puzzles there, I want them to check a box and say, "Okay, this is how my puzzle is allowed to be used."

Chris: Right.

Sven: For example, I want this puzzle to show up as a play next at the end of another puzzle, or I want this puzzle to only show--

Chris: Oh, sure. Like how YouTube does it. That's what you mean by YouTube of Sudoku.

Sven: Exactly. Exactly.

Chris: You've got a lot of work ahead of you, man. I'm just saying.

Sven: One-man shop here.

[Laughter]

00:34:11

Sven: I got contacted earlier this year about advertising on the site. That was a total mess. I tried a little bit of Google AdSense until one of the professors said, "Oh, my partner who is a teacher wants to do puzzles with their kids," and then they got an ad for - I don't know - bikini girls on the beach, right?

Dave: Ugh. Man.

Chris: Oh, god.

Sven: That's... I was....

Chris: You had to pull them? Yeah.

Sven: Oh, I pulled them immediately because I was making like $5 a day.

Chris: Two cents.

Sven: It wasn't worth it.

Chris: Yeah. Yeah.

Sven: It was just a test, right?

Chris: Has any money changed hands between you and CTC or is that just a handshake deal?

Sven: Well, the money is changing hands. It's not the direction you would expect because I'm paying them 50% of my income on the apps for the promotion.

Dave: Hmm...

Chris: Eh...

Sven: That is a bit of a problem for me because I'm not really making a lot of money. I'll be honest. That's part of why I want to do this bigger project. I need to keep some of that 60% that's leaving every month because I want to do more apps and the only promotion I have is now on this site. So, I can only promote to my own community, and that's part of why this advertising system, I'm building it from scratch now. I want people who currently--

There isn't a lot of commercial activity. There are a few people who have Patreon. There are some people who, like I said, sell PDFs on Etsy. There are other people who have PayPal links on their website, and then you get an email and things like that.

But they're all using my site for free. Okay, I don't make the puzzles. But I'm still working every day for the last three years on this thing and I need to make it sustainable somehow. That's part of why I'm working with Rami Ismail at the moment to help me out to kind of figure the business side of that.

Dave: Rami is great. Rami is from Vlambeer.

Sven: Yeah. Yeah.

Dave: Very talented.

Sven: I've known him for many years, and I was near Amsterdam visiting a friend. I went, "Wait a second! Rami lives around here somewhere," and I sent him a tweet. He's like, "Yeah, let's meet up." We had a coffee, and he thought the whole thing was so interesting, original. He was actually interested kind of long-term to be part of it somehow because this whole thing was such a weird amalgamation of technology, of community, of opportunity, of something unusual. Like I said, it's like the early Internet.

Chris: Yeah, it is all of those things.

Sven: Yeah.

Chris: I'll tell you that. Yeah.

Sven: As crazy as it feels to still be doing everything from scratch myself, which all my professional instincts say, "Don't do that. Why are you doing that?" Like I mentioned earlier, the mobile apps are all built on the same JavaScript codebase, run through Cordova, iOS, Android, Steam. I want--

I worked in the studio before where we had teams taking care of that stuff. I wanted to do it beginning to end myself so that the next time I'm running a team, I can say, "Hey, this is how it works. This is why you're doing it. This is what's going on."

Cordova is a horrible technology. It's so old. It's so unsupported. In fact, I'm working on a new version now using -- oh, my god. What's the new one now?

Chris: What is the new one? Ionic?

00:37:25

Sven: Well, Ionic is kind of the wrapper. Capacitor, I'm working with.

Dave: Okay. Ionic Capacitor. Okay. Yeah, yeah.

Sven: It's a very confusing landscape because Cordova, a lot of things just don't work, and a lot of documentation is out of date and stuff. The premise is simple. Every operating system has a Web view. You can build a fully functional app with all of the trimmings in JavaScript on a website.

Almost all of the technology is available nowadays. You want to read and write to files? You can do that through Web APIs. You want to access a camera, you want to load from a remote server.

For example, we did a 24 livestream, a funding livestream for Sudoku Con 2025 late last year, and I set up some... I created, basically, a real-time multiplayer sort of system where it transmitted all of the moves, including mouse movements, through the server so we basically could have people connected with their webcam, but we had a local recording of the board on the streaming server. So, you could log into a board and you could see the mouse movements off the host. You had a host client multiplayer dashboard sort of thing going on. I put it together in like three days before the stream.

Chris: Well, that's good. Yeah, it seems like a problem for someone else to solve somehow. You should look at Ably.com. I think they have kind of a plug-and-play kind of thing.

Sven: That's the thing, right? Nowadays, it would take you three days just to try three different services, read the documentation, do the samples, and then decide. You know what I mean?

Chris: Right. Yeah, yeah.

Sven: Nothing is as quick and easy as they make it out to be. It is quick and easy once you have made the decision, once you've read the docs and you've done the sample.

Chris: Right.

Sven: But for me, it's like... That's why I often end up doing things myself because I've tried it both ways. Often, I get this sort of decision paralysis.

Like with Capacitor, the number of times I had three, four, five, six different technologies, pros and cons, and tried the samples, and then you hit a roadblock because the documentation is out of date and the sample just doesn't run in the thing. "Oh, yeah. You're doing the wrong thing. You need to do this." Then you try to do this thing and then the other thing is the wrong version.

JavaScript is a bit of a mess. Let's be honest. Especially server-side JavaScript. In the browser, it's almost simple nowadays because it's so well supported.

Dave: Well, and I guess what benefits are you getting exactly out of the native bridge other than just deploying to an app store?

Sven: That's it. Charging money for it.

Dave: That's the one thing you need, huh?

Sven: Yeah.

Dave: Oh, my gosh.

Chris: Really?

Sven: Basically, having an account system is exactly where I can then say, "Okay, hey, for $5 a month, you get this extra feature."

Dave: Yeah. Yeah.

Sven: The main feature being cloud space, right? People play on their phone, and then they want to continue on their computer. They want to have it local.

Chris: That's pretty big.

Sven: Yeah. I did a prototype PWA. There's no reason to have a mobile app. I should be able to run the website offline well enough.

Dave: Mm-hmm.

Sven: You should be able to press a button, get your last 300 puzzles into a local storage when you go on a flight and then play the puzzles. In theory, right? In practice, your browser hiccups and then your site is gone and it's not in cache anymore. Right? [Laughter]

Chris: Right.

Sven: But you guys probably know more about that stuff than me because I've done the prototypes and the experiments but not the actual thing yet.

Dave: Well, notoriously hard. But yeah. [Laughter]

Chris: Yeah. It would seem like you need two kinds of accounts, too. You want to get those setters having accounts because that solves kind of the confusing, like, what's allowed and what's not allowed on this app thing. But you also want just regular user accounts, too, for the saving stuff.

00:41:14

Sven: Of, for sure. It'll be like YouTube, right? Every YouTube account can publish videos, but 99% of them don't. They're just viewers.

Chris: Oh, I see.

Sven: That's kind of how I envision it.

Chris: It's one kind of account with different types. Yeah.

Sven: Well, I don't see a reason. All users have an account, and if you want to publish a puzzle.

Chris: Go ahead.

Sven: I think there's a bit of a pipeline as well of people enjoying the puzzles, playing more, and then trying their hand in making one. It's kind of almost a graduation thing if it's easy to do. But like you guys have realized, you don't know how. You don't know where to go with that even if you had an idea for a puzzle. I would love to promote that.

Chris: I do think about it occasionally. I'm like, "I wonder if I could even... Could I even pull it off?" I don't know.

Sven: There are lots of streamers and YouTubers that make videos about how to make puzzles. In fact, I want to cooperate with them and make some puzzles. I have never set a puzzle, so this is long in the works. I want to do a video series of teaching Sven how to make a puzzle. Then use that.

Chris: Oh, yeah. There you go.

Sven: But that's the thing, right? You wouldn't even know where to look. You don't know. A lot of these YouTube accounts are very small and very niche.

Chris: Right.

Sven: With my site, I have the platform to say, "Hey, if you want to learn how to make a puzzle, here are three YouTube accounts that tell you how."

Chris: Yeah. Yeah, you're in a unique position because you're a one-man shop, you have all kinds of opportunity right and left, but you've got to pick the right thing. If you spend too long making a YouTube series about puzzle setting or something, it's at the cost of your time doing something else.

At the moment, you kind of got the lock on you're the app that people link to, to play the puzzles in. It's the best one, right? You've kind of got to hold onto that. You don't want to get ousted out of that.

Sven: The thing is, it's also a strange place where the communities and the niches are still kind of small. There are a lot of people who go to Sudoku.com. A lot of those people have never heard of CTC. CTC has 500,000 YouTube viewers, but how many millions of visitors does Sudoku.com have? How many millions of visitors has the New York Times Sudoku page?

Dave: Yeah.

Sven: I've always said, "Hey, if they come to me and they want to white label my app to use it on their site, I think they should do that." Right?

Dave: Yeah, yeah.

Sven: But they probably don't even know who I am.

Chris: You go to the New York Times one - or whatever - they don't have any variants, do they?

Sven: Oh, yeah. No, no. I understand why because of the mass appeal and the difficulty of teaching variant rules.

Chris: Right.

Sven: Variant, by definition, means it could be anything. Right? That's part of the beauty of it.

Chris: They could tiptoe. They could tiptoe with just a few cages or something.

Sven: Sure. I hope to do that. I hope to have that pipeline of teaching people, "Hey, do you want to try one or two of the common constraints. Here are the most popular constraints. Here are the best puzzles of the week. Here are the most popular ones."

"Oh, you like the Phistomefel puzzle on Cracking The Cryptic. Here is an easy puzzle that uses 50% of those constraints." That kind of thing, right?

Chris: Mm-hmm. Yeah.

Sven: I think that's the real value there because I think one of the things that CTC hasn't done well is the growth of the community. Their growth has been sort of incidental. But they haven't really been pushing.

It's very hard to go from watching a YouTube video, like an hour-long solve by Simon, to being able to solve such a puzzle or even enjoying that process.

Chris: Yeah. No, I don't even want to. I just like to... My whole goal in the puzzle to notice one thing before Simon notices it. Then I go to bed.

Sven: Are you active in the Discord?

Chris: No. I did join it at one point, and I was like, "This is a mess, dude."

Sven: That's the thing. The Discord is the premiere place for this stuff. But it's so inaccessible.

Chris: Is it?

Sven: It's so inaccessible. For example, in Discord, there is a channel where we have a daily Sudoku puzzle. It's called a GAS Puzzle, you know the Generally Approachable Sudoku. And Mark solves them or used to solve them. Once a week, he did five of them - or something. Those are the kinds of puzzles you can solve between five to ten minutes.

Chris: Okay.

Sven: A lot of them are about one particular constraint, and they're very much almost teaching you that constraint. They're almost like, "Hey, anybody can solve this killer puzzle."

Chris: Yeah. Here's a German Whispers line - or whatever.

Sven: But what I really need is a tutorial, a course on the site.

Chris: Yeah.

Sven: At the end, when you've gone through the puzzle--

00:45:25

Chris: It seems new. When was the first variant Sudoku puzzle? You know? Maybe it was a long time ago, but it seems like relatively recent popularity.

Sven: Yeah, popularity-wise. I'm not a Sudoku scholar. I've recently seen a graph about this steep spike in Sudoku popularity on Google Trends in like 2016, I think, or 2006.

Chris: Hmm...

Sven: A while back. Then it went down. But now it's kind of slowly hopping up again. On that graph, it doesn't look like a lot, but it's almost 50% up from a couple of years ago.

Chris: Yeah.

Sven: I think there's something happening. Things like variant Sudoku, the puzzle category, I think, is called pencil puzzles. Pencil puzzles are basically puzzles you can play on a grid with a pencil.

Chris: Mm-hmm.

Sven: They include line puzzles. They include shading puzzles and things like that. Not necessarily with numbers.

My tool kind of aims to support a variety of pencil puzzles. Not explicitly, but in theory, you can do a lot.

Chris: Yeah.

Sven: But the number stuff is super popular because it's international. It's not language-based, right?

Chris: Oh!

Sven: Word puzzles are. Cracking The Cryptic used to be about crosswords.

Chris: Right.

Dave: Oh, wow. Yeah.

Sven: But they don't translate very well.

Chris: Yeah.

Sven: Number puzzles do.

Chris: Especially cryptic ones. Those are just....

Sven: ...British.

Chris: ...whack. I don't even enjoy watching them. They're just like, "What are you talking about?"

Have you crossed the barrier of being able to? Even though they can be called pencil puzzles as a category, it seems like SudokuPad allows you to do stuff that you'd just be erasing too much. There's just too much crap in the grid to actually do it with an actual pencil. It's too information-dense for that at this point.

Sven: It's just the terminology.

Chris: Yeah.

Sven: I don't even fully understand what the definition is. I just know that there are some people who say, "Oh, I would never play SudokuPad. I only use Penpa," and Penpa stands for pencil puzzles.

Chris: Okay.

Sven: They'll have hex grids and triangular grids. Okay, they have a 3D cube grid. I could add those things but I look at the numbers, and I look at what percentage of people play what. And I look at the average length of people playing puzzles.

While a two-hour Phistomefel solve on Cracking The Cryptic is really exciting as a spectator sport, like StarCraft II, it is not the thing that people play. That's the other thing, the other side of it.

A lot of people tell me, "Oh, we don't have... We need users to specify, like rate puzzles and things like that." I'm like, "You know what? I've done analysis of play times of puzzles, and I get beautiful bell curves." Those bell curves very much correlate to a perceived difficulty, even though you don't agree with it, because you don't understand that once 1,000 or 10,000 people do a thing, the statistics do become significant, even if one person is faster than another.

Chris: Mm-hmm.

Sven: That's what I'm hoping to bring to the table. One other major site about puzzles is Logic Masters Germany, which is where a lot of these puzzles start out where they are being published. It is a site where people publish puzzles.

But there, the puzzles get 5 to 25 solves. Twenty-five solves, there's a success. The same puzzle will have 5,000 solves on SudokuPad.

Chris: Hmm...

Sven: With those numbers, I can now go in and say, "Okay, what are popular puzzles? What are...?"

Chris: God, you have great metadata then. Yeah, you absolutely could find popular stuff.

00:48:52

Sven: I did an analysis of one of the YouTubers. He asked for some information about the length of puzzles he's played, and he sent me saves of his replay data. That's 1,300 replays he's done. I figured out he spent 630 hours playing puzzles in SudokuPad.

I've done some work with the professors at the university who are working on... There's literally... My name is on a couple of grants now where they're doing research on this stuff where they want to play... They're doing studies into education like how does playing the puzzles correlate with educational performance in kids and things like that.

Chris: Hmm...

Sven: What are they called? Extracurricular education.

Dave: Mm-hmm. Mm-hmm.

Sven: Hey. Numbers could be fun, right? I'm very interested in saying, "Hey, if I have enough people playing puzzles and I look at how they play and where they pause and when they put in digits," I have done heatmaps, you can tell what people look at, at what time.

Anyway, a lot of stuff like that that I don't really understand but I do understand data, and I know that if you statistically analyze enough data, maybe you don't get the perfect answer but I'm pretty sure I can get to a point where I can show a puzzle to somebody that's fairly well aligned with their ability, with what they enjoy.

Chris: Oh, I didn't even think about that. Where are you going with this? You're like, "Oh, I'm going to give you a puzzle based..." Yeah, "A recommendation based on your skill level that I've analyzed. That's pretty cool. Although, down the road a little bit. [Laughter]

Dave: Yeah. That could be pretty simple, too. It's just like, "Dave solved this puzzle in 30 minutes. Similar users who have solved that puzzle in 30 minutes also solved this puzzle in about 28," so you could even guide me--

Chris: Right.

Dave: --a little victory journey, too, maybe.

Sven: Of course, it could be off when you've played one puzzle. But then you've played two. Then you've played three. It'll get better, right? It'll learn more about you. That's why I also want to have the sort of YouTube channel system because I want people to subscribe to each other. I want people to set up playlists. I want to learn. Kind of do the Spotify thing, like, "Hey, people who like these kinds of puzzles also like these kinds of puzzles. And you might also enjoy this."

Dave: Oh, a playlist would be awesome.

Chris: As a tiny word of warning, not that this is... This could be a most genius thing ever. I don't know what I know. But at one time -- and this is still true on CodePen today -- we set up machine learning-based individual feeds for every single user. Even though you don't use it very often, you've ever used it, we have some data on it, and we feel these machine learning models data based on stuff that you do on the site.

If you click and view a Pen, that's a little piece of data. If you comment on it, that's some data. If you heart it, that's a little piece of data. There's all kinds of things. There's a lot. There are a dozen or so different ways that you can interact with something on CodePen.

It's just forming a little bit of a model about who you are. Then this machine-learning model spits out Pens that it thinks that you'll probably like (based on your activity). Everybody's feed on CodePen is a little bit different. There's an algorithm of sorts.

The problem is it's just not that interesting, really. Chances are the stuff on CodePen, you're just going to like it because it's cool. Every Pen isn't so different from one another that you just won't like some sect of Pens. I don't have a ton of data on it, but I just am not that into it.

I just wonder if Sudoku has the same kind of vibe that it's just like, "They're all Sudoku puzzles." You know? You're probably going to like them - or whatever.

Sven: Initially, the plan is to do it all user-driven. It's like, "Hey, you like this YouTube channel. Subscribe to them. That YouTube channel might be showcasing." For example, Bremster showcases puzzles that are 20 to 30 minutes long versus Simon's 40 to 90 minutes.

Chris: Yeah. The solve length is a big deal.

Sven: Yeah. Ranks does the New York Times hard puzzle every day, and he has an adventure series - much easier.

Chris: Mm-hmm.

00:52:52

Sven: Somebody who subscribers to Bremster's channel and does more of those puzzles versus somebody who subscribes to Cracking The Cryptic's puzzle channel -- I'm talking about what will be -- but doesn't maybe solve the puzzles. That should tell me a lot already, but it's up to them, right? Initially, I don't need to do anything automatic or algorithmic.

There's a bit of a bad taste about it. I have no illusion. I'm a one-man shop. I'm not going to build Google and YouTube and Spotify over the weekend.

Chris: Right.

Sven: It's not going to happen. But the difference also is, in theory, I will have access to the entire replays. Because of the way the app works internally, and I built this in from the very start, everything you do, every button you press, everything you click translates into an internal language of puzzle actions. Then it goes into a stack. That's your undo and redo stack.

That's also your reply data. So, when you're going into a puzzle that you've played earlier, it basically replays what you've done. In fact, there's a replay tool in the settings. You should check it out. It'll animate that for you. You can make a GIF from it. You can literally output a GIF of your solve.

Chris: Hmm...

Sven: With that data, because it includes timing information, I can say a lot more about, "Did you abort the solve? Did you finish the solve? Did you get stuck? Did you stop and then come back to it a day later?"

I think the signal there will be much stronger to exclude puzzles you didn't enjoy, that you've just attempted, or puzzles that you've solved and you were happy. The usual rating afterwards, "Hey, I enjoyed this puzzle."

I'm doing a lot of that for myself. I want to be able to bookmark puzzles that I enjoyed. I want to make playlists and things like that.

Chris: Yeah. Collections was a good move for us, so try that. Yeah.

Yeah, pretty cool. So, way back earlier, you mentioned what sets this apart in some way is the usability. I forget the exact term you used. You mean it's nice to use.

Sven: Mm-hmm.

Chris: That's pretty clutch. And it has a lot of those features, and it looks quite easy to use. Surely, that's why the people who use it prefer it and like it. Not that it's the only one on the block, but it's that it's nice. There are easy commands to use, and it supports the features and stuff.

I remember for the first time learning, like when I used to do them on a piece of paper. Not that I'm any good at it, but I'd have my own little system where I'd put little dots. The dots represented what number it could be - or something like that.

It blew my mind when I first saw that there's a difference between two different types of numbers: corner marks and center marks. Generally, when you use a center mark, you're saying, "This cell can only be one of these center marks." If you see center marks, that cell can only be those numbers. Whereas the corner marks are different. They say, "If you see multiple corner marks in a thing, it means that a 3 (or whatever number it's going to be) has to be in one of these positions and that those are just totally different concepts.

One number system can't do it. You need two places to put numbers. I don't know who originally developed this corner versus center mark system, but it's genius. Now, I feel like you've got to have that. And there are a bunch of apps on the app store that don't have the two kinds. They just have one kind of mark. It's like, "This is trash! I can't use it!"

00:56:05

Sven: We call it Snyder notation because it was invented by a fellow, Snyder, who is fairly famous in the community the early days of Sudoku. For example, one of the things, one of the early features I did was the color markings and the Studio Goya apps that Cracking The Cryptic sells, they had like one or two or three colors that you could choose.

Chris: Hmm...

Sven: I didn't like it. At the time, I was thinking very hard about how can I make that work similar to the number systems, the pencil marks. Eventually, I came up with this little color wheel where, when you have two colors on a cell, it doesn't just make them half and half or mixes them or whatever. It cuts them diagonally.

Chris: Right.

Sven: Then it splits it radially in this little star pattern.

Chris: Yeah. One can have five colors.

Sven: Yeah.

Chris: I don't even know if there's a limit.

Sven: But the funny thing is that has now been adopted by Studio Goya, and I've seen it pop up in other apps.

Chris: Oh, no.

Sven: It's actually been influencing other apps to do it the same way. And new apps that have been made use that because people are just so used to it now. It's a little... I feel almost worried a bit because I don't feel like I've put enough thought into certain things to justify it being in ten different sites and apps. I put enough thought of it being in my app. But if it becomes a quote-unquote "industry standard" suddenly and it's not documented, it's not written down.

I have all these plans to write this stuff down and I never... That's never high on the priority list, unfortunately. It's a weird place to be where it's both trend-setting but also the site is relatively small. It's become big enough.

Chris: Right.

00:57:44

Sven: It's just gotten over a threshold where I'm getting acquisition offers, which was a very weird experience starting this year.

Dave: Oh, wow.

Chris: Oh, yeah. There you go. Dave's policy is that you should take the money.

Dave: Always say yes. Take the money and run. Just buy a yacht. Buy a nice boat.

Sven: Yeah, a yacht.

Dave: Yeah.

[Laughter]

Sven: It's not yacht money, the offers. But the interesting part is that a lot of them miss the bigger picture. The first offer I got, they didn't know I was making money off apps. They didn't know my traffic was coming from YouTube videos. They just saw my site pop up on some traffic comparison site with other puzzle websites.

Chris: Oh, I see.

Dave: Yeah. You've got to be a little deciduous. Yeah, yeah.

Sven: You see what I mean? So, it would be a bit useless to them because they wouldn't be able to drive the same traffic if they cut the community off that I bring to the table.

Now, other offers I've gotten were just for the mobile app, so they find the mobile app on some sort of comparison site and they want to buy the mobile app. I'm like, "You know but the source code, I can't give you ownership of that because my website runs off that." The app will not sell if I take the link down on my website because it doesn't rank. I don't rank for Sudoku on the app store. It's like the app is being sold through the Cracking The Cryptic videos.

It's all kind of integrated, and it's not a standard business model. That's the weird thing. It's not just a game. It's not just an app. It's not just a website. It is all of those things.

The thing that it's missing right now is the community part because the community lives outside of the site. It lives on Discord. It lives in the YouTube channels.

I want to bring that community onboard. I want to be able to say, "Hey, instead of you finding a puzzle on some YouTube video, I want you to come to my site, find the puzzle link, and then click to the YouTube video to watch the solve if you're interested." That way around.

It'll be an interesting journey because there will be egos and toes being stubbed left, right, and center because some people won't like that. Some people feel very strongly about their puzzles (where they should be).

People complain to me because I don't support some weird code feature that the Logic Masters Germany website uses for recording solves. Logic Masters Germany is like 300 people. They're five minutes of my traffic.

Chris: It is really?

Sven: I'm not going to build something for that.

Chris: Oh, that's funny. I didn't know it was so few people. That gets--

Sven: I don't know. It's not 300 people per se, but the traffic, I think--

Chris: Yeah, right. It's a lot smaller.

Sven: My traffic is about six times their traffic - or something like that.

Dave: Right.

Chris: But it's the only way you get a rating of a puzzle, right?

Sven: But that's the thing. Who gets that rating? The people who set the puzzles care about that stuff.

Chris: Yeah.

Sven: But 90%, 95% of my audience, they don't know about that and they don't care.

Chris: Yeah.

Sven: So, I'm not going to put a special feature in. I'd rather build that myself down the line.

Chris: Right. You just finished it. Why don't you rate the puzzle?

Sven: Yeah! It's difficult. I have tried very hard to remain neutral. I almost don't want to build my own puzzle-setting tool because I don't want to upset the part of the community that builds those tools because then I feel like I'm competing with them. The moment I build a puzzle set or two, they'll build a player into their setting tool. The people who are already setting that tool, those puzzles might never make it to me anymore. It's a very... I feel like I have to be very careful where I tread, what I do, and what I attempt.

01:01:01

Chris: Can the water shuffle under your feet a little bit, too? I was curious. We've got to end this in a minute, but I was curious. I don't know what it was. It doesn't feel like it's been that many years ago. All of a sudden, Fog of War puzzles started coming up where you can't see the whole grid. You can only see the thing.

You didn't invent that, right? All of a sudden, you wake up someday and be like, "Ah, man! My software has to support some new, crazy rule thing."

Sven: Fog of War was fun. It was interesting. There's this fellow, Chameleon. He is kind of like me. He'll see something and he'll want it, and he won't ask me to make it. He'll make it himself.

He has a site. PuzzleTV, I think it's called. Basically, every puzzle on that is kind of custom coded. He'll come up with an idea, and he'll write the JavaScript to modify his engine, hard code it for that one puzzle. That engine will run only that one puzzle. That's how he made Fog of War.

I didn't even know it existed until it came out to Cracking The Cryptic. I asked him, "Hey, do you mind if I put it in?" He's like, "No, that's kind of what it's for."

I put it in as a sort of gamble because it's quite a bit of work to put in a new feature.

Chris: Yeah.

Sven: Puzzles won't exist until I enable them to exist because other people couldn't make those puzzles. I added the feature, and I kind of came up with a roundabout way of how to do it. Eventually, basically, F-puzzles, none of the puzzle makers supported Fog of War.

I said, "Okay, if you create a cage with an invisible total and the total says the word "fog" or whatever, then et cetera, et cetera. In F-puzzles, it was kind of like that. Then somebody created a browser extension, so people now can just click a button and do it. But it was kind of a three-step process to hack it into that puzzle format, so on and so forth.

Chris: Hmm...

Sven: It blew up, and people love it. I personally enjoy it very much. Again, I kind of went the extra mile to make the edges nice and work with filters. I revised that SVG rendering so many times with little animations and things like that. You probably don't even notice.

Then I created a sort of unofficial policy and said, "Okay. Any new feature requests, I need you to design five puzzles, at least," so I know... I'm not going to spend three days of work to put a feature in the app that only works for one puzzle and nobody can make another puzzle like it.

People haven't really been taking me up on it because, again, I don't have a platform. I don't have a place where I can publish these things. That's what the site is supposed to be. But I'd LOVE to have these kind of puzzle-set-driven inventions and new technologies.

People are so bloody creative. They already figured out so many different ways of doing new puzzles on the site. I have a long list of pending -- you know, double digits -- somebody has built a patch for it that works a year and a half ago, and I just need to put it in.

Chris: Hmm...

Sven: Letter mode, it was a similar thing. Letter mode, a huge number of problems because suddenly all the hotkeys are kind of overridden and things like that. You want to type in an A, or do you want to press Control-A, or do you want to...? Do you want to corner mark the letter A, or do you want to select all? I don't know.

It's a never-ending thing, and that's part of what makes it fun as well.

Chris: Yeah. Yeah, yeah. We talked to this guy who makes this really niche app for musicians that want to have the app play chords for them automatically. One of the features of the app is that you can put your own songs into it, so he needed to design not only the app for people that just look up the song and play it but for the people that create the songs, too. It's this two-side thing, kind of like you have.

Sven: Hmm...

Chris: The way that you put in the apps, you can't just type in, like, "Play the G-chord, G-chord, C-chord, D7," whatever, because you need the keypress to say which chord it's going to be when one block is selected. So, you can't... It's like you can't make these assumptions about what a key is going to do, especially on the Web. It sucks.

Sven: Yeah. Some hotkeys are still... Sometimes, you press Control-3 and it just changes tabs. I don't think I can override those.

Chris: Yeah.

Sven: It's a bit of--

Chris: Some you can, some you can't. You know?

Sven: Yeah. And it's not reliable. It's not the same from browser to browser, so I get a lot of issue reports from iOS. I'm not an iOS guy, so it's always very hard for me to test it and so on.

Chris: Yeah.

Sven: It's the world we live in, right? We've chosen to do things on the Web. But it's touch. And people don't understand.

They're just like, "Why does it not do the thing when I press the button?" It's like, "Well, I'd like to do the thing, but the browser won't tell me when you press the button." It won't. There's nothing I can do about it.

I wish the browsers would get to the point now because they want to make games in browsers a thing, right? They need to give us a mode where you can just have a native quality. You need to be able to capture everything just like you can in a Windows app.

Chris: Yeah.

Sven: But the will isn't there, apparently.

Chris: Uh... tricky, tricky.

Dave: Well, hopefully, it gets better soon.

We do have to wrap this up. But thank you so much, Sven, for coming on the show. For people who aren't following you and giving you money, how can they do that?

Sven: If they go to svencodes.com, there are links to Patreon and coffee, which all the best people in the world go to give me money and let me do this thing. [Laughter]

Dave: Fun. Perfect. Awesome.

Sven: I'm completely unbiased.

[Laughter]

Dave: It's just the best people. Well, that's very cool. I just feel like I've met a celebrity just from my sphere of YouTube and stuff, so thank you very much for coming on the show.

Thank you, dear listener, for downloading this in your podcatcher of choice. Be sure to star, heart, favorite it up. That's how people find out about this show and SudokuPad.

Then also follow us on Mastodon because we're there. And then join us over in our Discord, patreon.com/shoptalkshow. Chris, do you got anything else you'd like to say?

Chris: Oh... ShopTalkShow.com.