 Okay, I'll just sit, I think, up now, standing is better, huh? Right, I'm going to make it as quick as I can because there's a lot of different talks and I think it's about 20 slides, there's a chance I might go off rambling about one particular piece of software that's featured in this story, just yell at me if I do that. A bit more than a year ago I was introduced by Seb, by the way, thanks a lot, to this startup, a local startup in Singapore, does e-commerce, is based on Magento, did the development of its Magento website mainly offshore, different companies, the last one was somewhere in the Ukraine or somewhere in Eastern Europe, and they needed a mobile web front-end because they only had a desktop optimized site. So I don't know who here knows Magento, has anybody ever worked with Magento? It's really bad, it's just really, really bad. It was built somewhere mid-last decade, about 10 years ago, based on the Sand Framework one, it was kind of the period where PHP was sort of getting modern, but it wasn't quite there yet. The data model, because of four accessibility reasons, is based on the EAV pattern or anti-pattern. The templating system is really, really bad, super complicated, you define layouts in XML files, and then you have templates with these templates, like you have template blocks, but these also have a block class behind them that has some code in it, and it's just, I didn't even try to understand it, even a couple years ago, when I had to do a Magento project. It also uses prototype JS for those who know it, know that, that was around at the same time roughly when jQuery came up, and it was sort of similar, but not quite as nice as jQuery, so jQuery won. So Magento bet on prototype, and yeah, basically it's tactical debt. If you, a lot of people say you can very easily build a nice little shop in Magento very quickly if you don't have in house off, you farm it off to Eastern Europe or something, but in the end you'll spend more time just being annoyed at it and reaching at your computer and stuff. So there's like three different ways, I think, three obvious ways to react to this one is, you just get out, you're like, I'm not doing it. I'd rather do something nicer instead. Number two is, you just say, I do it, but we just destroy everything you built, and then we just stop from scratch, we do something else, something that's not Magento. That's probably very hard to sell, and also doesn't make a lot of sense. And number three, of course, is you accept the fact that you have to work on Magento, so I didn't want to do that, I didn't want to do any of it. So I was looking for another solution, and I was thinking maybe there's a way to just do my thing on the front end, JavaScript only, have an API in track of Magento. Magento actually has APIs built in, it has something, it has a SOAP API, which you can't really use from a browser. It has something like a REST API, but it's both mainly for backend type stuff to integrate with whatever systems you want to integrate your Magento with, it's not for front end stuff. One guy in Germany actually extended that API and built something, built an Angular front end for it, and he gave a talk about it, it's on YouTube. I didn't want to do that, it didn't look nice, you still have to do Magento development in the end. And then there was this other project on GitHub called Magento on Angular, it's a guy in Britain I think, he basically started a Laravel project, it uses a Magento God class, it's one class from Magento, you basically get this class into your project and then you can use it to get from that access all the data, all the other instances from classes and things like that. It implemented some aspects of what you need in a web shop, not everything, but it was MIT licensed, or at least the only place in the whole project that has any reference or license as far as I can tell is the Bauer file, and it said MIT licensed there, so I just made a fork, a private fork, and I implemented all that stuff, like the stuff we needed to check out the search and some other small stuff that's very specific to that one company. And on the client side I used Angular, which actually worked quite well. So there now is a mobile frontend that's mobile optimized, it's relatively quick, data, everything is still in Magento, all the transactions are handled by Magento, but I don't really have to touch it much, especially not for frontend related stuff, and especially not the templating part. So I was basically doing that only half of my time, I did some other stuff as well, I was not a full-time employee, and this was one project. So I did that, and after that they were like, okay, now we need a mobile app for people who want to sell stuff, the site is a marketplace, so you also depend on people submitting their products. And for that, basically I just extended Magento on Angular again, that little server-side API for the stuff we needed for the app. We got the app development done by an external person as well, and that worked out as well. It's now a sort of functional app. It's not very pretty yet, but it does its job. Now, meanwhile, the main website was still maintained by the offshore team, our digital marketing guy at Style Tribute was basically assigning them tasks and asking them to change stuff. It's still not a very good frontend, if you ask me, if you look at it, it's not perfect, but it's a startup, and in startups, especially pre-series, they start up, I guess, sometimes you cut corners. You want to build something that works, you want to have basically an MVP, even if it's a bit ugly, so it's fine. But the end goal, for me, always was to have one nice polished frontend based on the work I did for the mobile, completely responsive, of course. So over time, when I was doing all that other stuff, I took over all the CTO-style responsibilities in that company, and now all the work, all the change requests and everything go through me, and whenever I have to implement something big, a big feature, I just throw out that part of the Magento-based frontend, and I reuse my Angular components. And it's still nothing like it. I'm working on something, basically a complete revamp of the product detail page with some additional functionality that will hopefully go live within the next couple of days. And I started doing server-side stuff whenever possible in Node as microservices. I started doing that now for transaction emails. I have a little service for that. The idea, of course, in the end is to use only the API to interact with Magento from the frontend, from all the customer-facing stuff. And a couple of weeks ago, I realized when you do that, once you have that, then basically what you have with an API is an informal specification of all the stuff you need to do, of all the stuff the backend needs to do to serve the clients. And that also means, at some point, you can easily just switch out the whole API, and you don't have to redo anything on the frontend. So that's basically, finally I get my sledgehammer, finally I can sort of kick Magento out. And there will not be a big disruption. There's not like we need to redo everything. We put everything on hold. We can do it face, like in phases, we do it on the frontend first. And I guess the switch of the main, say, transaction engine, that will be a bigger switch. But still, we can still, at the same time, work on the frontend, improve it there, and the improvements are not lost. So now it's about actually building something serious rather than something that works on MVP type product to attract investors. Now we need to build an actual proper platform to run this startup. And I'm not quite sure yet what I want to build it on. I'm relatively sure I want to use JavaScript for everything, server and client. I haven't really figured out yet which frameworks or libraries are going to be around in five years. They are talking about Express or Meteor or something. So that's still open. I'm still kind of, I'm trying to work around that by just doing minimal encapsulated stuff, reusable stuff. Oh yeah, right, one reason I'm talking about this today is because I could convince internally, I could convince the CEO to start building a tech team. Now is the time to build a team to build this stuff. So yeah, if you want to do something like that, build it from the ground up. No longer in startup mode, but actually build something that lasts architected properly. Maybe no EAV, data patterns, and things like that. Yeah, talk to me. All right. And this will be your coworker, maybe. Very nice. All right, any questions? Awesome. Thanks. Actually, I do have a real question. Do you think this is something you generally abstract because there's thousands of companies stuck on Magento because they can't afford to further develop on it? And this solution is so elegant, can this become a agenda item? I wouldn't call it elegant, but so in the meantime, so my private fork of Magento on Angular, that's very specific for that thing that has references to shoe size and things like that. It's just really hacked together. But so that fork happened a bit more than a year ago. So in the meantime, they started doing more stuff, they got a bit more attention, more developers, so that project is still around. Yeah, I think it's a good way to migrate away slowly if you can't afford to just rebuild everything from the beginning. But I'm not sure how the project actually is doing. I see there's some activity on GitHub, but I haven't really looked into it in a while. Cool. Thanks. Thank you. Thank you. Thank you.