<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Ashok Gelal</title>
    <description>The latest articles on DEV Community by Ashok Gelal (@ashokgelal).</description>
    <link>https://dev.to/ashokgelal</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F286986%2Fc43c229d-8e93-44da-8926-757683f2f988.jpeg</url>
      <title>DEV Community: Ashok Gelal</title>
      <link>https://dev.to/ashokgelal</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ashokgelal"/>
    <language>en</language>
    <item>
      <title>A web app from scratch to finish with Alpas and Kotlin — Authentication Scaffolding </title>
      <dc:creator>Ashok Gelal</dc:creator>
      <pubDate>Tue, 28 Jan 2020 16:00:13 +0000</pubDate>
      <link>https://dev.to/ashokgelal/a-web-app-from-scratch-to-finish-with-alpas-and-kotlin-authentication-scaffolding-634</link>
      <guid>https://dev.to/ashokgelal/a-web-app-from-scratch-to-finish-with-alpas-and-kotlin-authentication-scaffolding-634</guid>
      <description>&lt;h1&gt;
  
  
  A web app from scratch to finish with Alpas and Kotlin—Auth Scaffolding
&lt;/h1&gt;

&lt;p&gt;In this part, we'll scaffold an entire auth system by running a simple command and writing a very minimal amount of code.&lt;/p&gt;

&lt;h3&gt;
  
  
  What are we building?
&lt;/h3&gt;

&lt;p&gt;🔥 Fireplace. You can &lt;a href="https://fireplace.alpas.dev/"&gt;browse the live app&lt;/a&gt; to get a feel for what we are building.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Just to be clear, to keep the tutorials relevant and short, we are not going to cover any CSS, HTML, or JS in his series. We will make sure to point out something if we deem it to be mention worthy. For styling, we will use TailwindCSS, and for client-side interactivity, we’ll be using JavaScript and some VueJS.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Preparing the Database
&lt;/h3&gt;

&lt;p&gt;Before we start, make surethat you have a MySQL database server running. Create a database named &lt;code&gt;fireplace&lt;/code&gt; and update your &lt;code&gt;.env&lt;/code&gt; file with proper database credentials. It should look something like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
DB_HOST=localhost
DB_USERNAME=root
DB_PASSWORD=secret
DB_DATABASE=fireplace
DB_PORT=3306
DB_CONNECTION=mysql

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Open &lt;code&gt;configs/DatabaseConfig.kt&lt;/code&gt; and make sure that it is using a connection that matches the type you have set for &lt;code&gt;DB_CONNECTION&lt;/code&gt; in your &lt;code&gt;.env&lt;/code&gt; file. In our case, this would be &lt;code&gt;mysql&lt;/code&gt;. (You should just have to uncomment the call to &lt;code&gt;addConnections&lt;/code&gt; in the init function.)&lt;/p&gt;

&lt;h3&gt;
  
  
  Migrating the Database
&lt;/h3&gt;

&lt;p&gt;Authentication requires two database tables—&lt;code&gt;Users&lt;/code&gt; and &lt;code&gt;PasswordResetTokens&lt;/code&gt;. Alpas ships with pre-definied versions of these tables/entities. These classes must map to tables in your actual database. To make it easy for you, Alpas already ships with the migration files you need to create these two tables. All you need to do is migrate by running the following Alpas commandfrom your terminal:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;alpas migrate&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;You should now have two tables in your database.&lt;/p&gt;

&lt;h3&gt;
  
  
  Scaffolding
&lt;/h3&gt;

&lt;p&gt;An authentication system needs a lot of files and wiring. Thankfully, Alpas can create all of this for you with one command. You can further customize the scaffolded auth files as you wish. Let's run the command:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;alpas make:auth&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Once the files are created, open &lt;code&gt;routes.kt&lt;/code&gt; file and call the &lt;code&gt;authRoutes()&lt;/code&gt; method from within the &lt;code&gt;addRoutes()&lt;/code&gt;method to register all the auth routes. We will later see how we can further customize the routes.&lt;/p&gt;

&lt;p&gt;We are now ready to compile and run the app!&lt;/p&gt;

&lt;p&gt;When you run the app, the first thing you will notice is that the home page now has 2 links on the top-right corner—&lt;code&gt;Login&lt;/code&gt; and &lt;code&gt;Register&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Believe or not, we have a whole auth system now including login, registration, password reset, and email verification!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--wgmReHMj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/nquc0y3ohjiutmiy5zcv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--wgmReHMj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/nquc0y3ohjiutmiy5zcv.png" alt="login screen"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let's create an account and see what happens.&lt;/p&gt;

&lt;p&gt;You'll notice that you'll be asked to login and once you login you'll be asked to verify your email.&lt;/p&gt;

&lt;h3&gt;
  
  
  Email Verification
&lt;/h3&gt;

&lt;p&gt;Alpas auth scaffolding comes with support for email verification. It is enabled by default, but you can disable it if you want. Right now though, you might be wondering how can you verify your email address on a local machine.&lt;/p&gt;

&lt;p&gt;Alpas supports two mail drivers out of the box—SMTP Driver and Local Driver. It is set to local by default, which is set in your &lt;code&gt;.env&lt;/code&gt; file. This makes email debugging easy during development. The local driver dumps all the emails as HTML pages in &lt;code&gt;storage/mails&lt;/code&gt; folder.&lt;/p&gt;

&lt;p&gt;Navigate to the &lt;code&gt;storge/mails&lt;/code&gt; folder and open the latest mail in your browser and click the &lt;code&gt;Confirm email address&lt;/code&gt; button.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--swfx8iX3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/8otyoafm7u5zeea19xun.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--swfx8iX3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/8otyoafm7u5zeea19xun.png" alt="email verification"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After you have verified, you will now be taken a &lt;code&gt;dashboard&lt;/code&gt; kind of page. Don't worry about customizing this page right now though, we'll be removing it in a later lesson.&lt;/p&gt;

&lt;h3&gt;
  
  
  Disabling Email Verification
&lt;/h3&gt;

&lt;p&gt;If you want to disable email verification, you can do so easily by following these steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Pass &lt;code&gt;requireEmailVerification = false&lt;/code&gt; in your &lt;code&gt;authRoutes()&lt;/code&gt;:&lt;br&gt;
&lt;code&gt;authRoutes(requireEmailVerification = false)&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Open &lt;code&gt;entities/User.kt&lt;/code&gt; file and set &lt;code&gt;mustVerifyEmail&lt;/code&gt; to &lt;code&gt;false&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Just to cleanup, open &lt;code&gt;controllers/HomeController.kt&lt;/code&gt; and remove &lt;code&gt;VerifiedEmailOnlyMiddleware&lt;/code&gt;. In fact, you can delete the whole&lt;br&gt;
&lt;code&gt;override fun middleware(call: HttpCall)&lt;/code&gt; method.&lt;/p&gt;




&lt;p&gt;You just saw that it takes no more than 1 command to create everything for a modern authentication system.&lt;/p&gt;

&lt;p&gt;You might be slightly disappointed that so far you haven't really get to write some code. I promise to let you write some in the next post where we'll get into the meat of the application—allowing a user to&lt;br&gt;
add a new project and list all their projects.&lt;/p&gt;

&lt;p&gt;See you in the next one!&lt;/p&gt;




&lt;p&gt;If you want to check out what the project looks like at this point, the &lt;a href="https://github.com/alpas/fireplace/releases/tag/v0.3.0"&gt;source code of Fireplace is available on GitHub&lt;/a&gt; and is tagged as &lt;a href="https://github.com/alpas/fireplace/releases/tag/v0.3.0"&gt;&lt;em&gt;v0.3.0&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;If you found a bug please open an issue. If you have questions, comments, or feedback, or if you just want to hangout with people who are learning Alpas and with people who built Alpas, we have a &lt;a href="https://join.slack.com/t/alpasdev/shared_invite/enQtODcwMjE1MzMxODQ3LTJjZWMzOWE5MzBlYzIzMWQ2MTcxN2M2YjU3MTQ5ZDE4NjBmYjY1YTljOGIwYmJmYWFlYjc4YTcwMDFmZDIzNDE"&gt;&lt;strong&gt;dedicated Slack&lt;/strong&gt;&lt;/a&gt; for that. We’d love to have you there. &lt;a href="https://join.slack.com/t/alpasdev/shared_invite/enQtODcwMjE1MzMxODQ3LTJjZWMzOWE5MzBlYzIzMWQ2MTcxN2M2YjU3MTQ5ZDE4NjBmYjY1YTljOGIwYmJmYWFlYjc4YTcwMDFmZDIzNDE"&gt;&lt;strong&gt;Please join us&lt;/strong&gt;&lt;/a&gt; &lt;strong&gt;!&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Questions?&lt;/strong&gt; &lt;a href="https://join.slack.com/t/alpasdev/shared_invite/enQtODcwMjE1MzMxODQ3LTJjZWMzOWE5MzBlYzIzMWQ2MTcxN2M2YjU3MTQ5ZDE4NjBmYjY1YTljOGIwYmJmYWFlYjc4YTcwMDFmZDIzNDE"&gt;&lt;strong&gt;Ask us in our Slack.&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>kotlin</category>
      <category>tutorial</category>
      <category>fullstack</category>
      <category>webdev</category>
    </item>
    <item>
      <title>A web app from scratch to finish with Alpas and Kotlin — Up and Running</title>
      <dc:creator>Ashok Gelal</dc:creator>
      <pubDate>Wed, 22 Jan 2020 17:41:21 +0000</pubDate>
      <link>https://dev.to/ashokgelal/a-web-app-from-scratch-to-finish-with-alpas-and-kotlin-up-and-running-1165</link>
      <guid>https://dev.to/ashokgelal/a-web-app-from-scratch-to-finish-with-alpas-and-kotlin-up-and-running-1165</guid>
      <description>&lt;p&gt;If you are reading this then maybe &lt;a href="https://dev.to/ashokgelal/let-s-build-a-web-app-from-scratch-to-finish-with-alpas-and-kotlin-29eo"&gt;I’ve convinced you&lt;/a&gt; to try out both Kotlin and &lt;a href="https://alpas.dev"&gt;Alpas&lt;/a&gt; by writing a complete web app. I’m super happy you are here and I’ll try my best to make sure your time is worth it and well spent. Let’s get started!&lt;/p&gt;

&lt;p&gt;We will keep this post short and simple. We are just going to create a new project from a template, talk about few things that you need to know right off the bat, and build and run it.&lt;/p&gt;

&lt;p&gt;Get started by first &lt;a href="https://alpas.dev/docs/installation#system-requirements"&gt;making sure your system is ready&lt;/a&gt; for writing a Kotlin web app using Alpas.&lt;/p&gt;

&lt;p&gt;Now, visit &lt;a href="https://github.com/alpas/starter"&gt;Alpas starter template repo&lt;/a&gt; and create a new repo based on this template (click that green &lt;strong&gt;Use this template&lt;/strong&gt;  button).&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Name your repo fireplace and clone it on your local machine.&lt;/li&gt;
&lt;li&gt;At the root of the project there is a script named &lt;em&gt;alpas&lt;/em&gt;. Make it executable: &lt;code&gt;chmod +x ./alpas&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Initialize your new project using the full package name: &lt;code&gt;./alpas init com.example.fireplace&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Once done, to &lt;a href="https://alpas.dev/docs/installation#serving-locally"&gt;serve your app&lt;/a&gt;, do: &lt;code&gt;./alpas serve&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Just to make sure that your frontend dependencies are not outdated, run &lt;code&gt;yarn install &amp;amp;&amp;amp; yarn dev&lt;/code&gt; (make sure that you have NodeJS and npm installed).&lt;/li&gt;
&lt;li&gt;Download the excellent &lt;a href="https://www.jetbrains.com/idea/"&gt;IntelliJ IDEA&lt;/a&gt; and open the project.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;There isn’t much to do for this part. But once you open the project, browse the app to try to get an idea of &lt;a href="https://alpas.dev/docs/project-structure"&gt;the structure of an Alpas web app&lt;/a&gt;. This will help you to navigate faster when we start adding more features in future.&lt;/p&gt;

&lt;p&gt;To help you get oriented, here are are some of the files you can skim over:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;start.kt&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The is the file where it all starts. You probably never have to touch this file except for actually running the app. IntelliJ should have a “green play button” right next to the &lt;code&gt;main&lt;/code&gt; function that you can click to run your app.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;.env&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This contains all your environment related configuration values. You can override so many of the core configuration values in this file.&lt;/p&gt;

&lt;p&gt;Start by changing the value of APP_NAME variable and see what happens when you run your app again. Can you change the port address at which your app is served by changing one of the values here? Which one?&lt;/p&gt;

&lt;p&gt;Do a quick read on &lt;a href="https://alpas.dev/docs/configuration"&gt;&lt;em&gt;Configuration&lt;/em&gt;&lt;/a&gt; documentation to better understand one of the most critical components of Alpas.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;configs/DatabaseConfig.kt&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This class file is where you’d be adding database connections for running CRUD operations. I highly recommend going over &lt;a href="https://alpas.dev/docs/database-getting-started"&gt;&lt;em&gt;Database Getting Started&lt;/em&gt;&lt;/a&gt; documentation to prepare for the next part.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;routes.kt&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All your app routes should be kept in this file. You can read more about Alpas &lt;a href="https://alpas.dev/docs/routing"&gt;Routing&lt;/a&gt; to be better prepared as we’ll be adding bunch of them here very soon.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;controllers/WelcomeController.kt&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The controller responsible for deciding which page gets rendered when the home page route is matched. Alpas &lt;a href="https://alpas.dev/docs/controllers"&gt;&lt;em&gt;Controllers&lt;/em&gt;&lt;/a&gt; documentation is a quick read.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;resources/templates/welcome.peb&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The “landing” page of the app. Feel free to tweak it if you want to but don’t remove anything yet. You can change the title of the page if you want. Being familiar with Alpas &lt;a href="https://alpas.dev/docs/pebble-templates"&gt;&lt;em&gt;Templating&lt;/em&gt;&lt;/a&gt; engine is going to help you move much faster.&lt;/p&gt;

&lt;p&gt;We did not write anything in this post but only created a project and that was intentional. I want you to spend some time reading &lt;a href="https://alpas.dev/docs"&gt;Alpas docs&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Don’t worry, you don’t need to know everything; just being familiar with where to look for things is more than enough at this time.&lt;/p&gt;

&lt;p&gt;If you want to check out what the project looks like at this point, the &lt;a href="https://github.com/alpas/fireplace/releases/tag/v0.1.0"&gt;source code of Fireplace is available on GitHub&lt;/a&gt; and is tagged as &lt;a href="https://github.com/alpas/fireplace/releases/tag/v0.1.0"&gt;&lt;em&gt;v0.1.0&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;If you found a bug please open an issue. If you have questions, comments, or feedback, or if you just want to hangout with people who are learning Alpas and with people who built Alpas, we have a &lt;a href="https://join.slack.com/t/alpasdev/shared_invite/enQtODcwMjE1MzMxODQ3LTJjZWMzOWE5MzBlYzIzMWQ2MTcxN2M2YjU3MTQ5ZDE4NjBmYjY1YTljOGIwYmJmYWFlYjc4YTcwMDFmZDIzNDE"&gt;&lt;strong&gt;dedicated Slack&lt;/strong&gt;&lt;/a&gt; for that. We’d love to have you there. &lt;a href="https://join.slack.com/t/alpasdev/shared_invite/enQtODcwMjE1MzMxODQ3LTJjZWMzOWE5MzBlYzIzMWQ2MTcxN2M2YjU3MTQ5ZDE4NjBmYjY1YTljOGIwYmJmYWFlYjc4YTcwMDFmZDIzNDE"&gt;&lt;strong&gt;Please join us&lt;/strong&gt;&lt;/a&gt; &lt;strong&gt;!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;See you in the next one!&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Questions?&lt;/strong&gt; &lt;a href="https://join.slack.com/t/alpasdev/shared_invite/enQtODcwMjE1MzMxODQ3LTJjZWMzOWE5MzBlYzIzMWQ2MTcxN2M2YjU3MTQ5ZDE4NjBmYjY1YTljOGIwYmJmYWFlYjc4YTcwMDFmZDIzNDE"&gt;&lt;strong&gt;Ask us in our Slack.&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>kotlin</category>
      <category>alpas</category>
      <category>webdev</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Let's build a web app from scratch to finish with Alpas and Kotlin</title>
      <dc:creator>Ashok Gelal</dc:creator>
      <pubDate>Tue, 21 Jan 2020 22:14:39 +0000</pubDate>
      <link>https://dev.to/ashokgelal/let-s-build-a-web-app-from-scratch-to-finish-with-alpas-and-kotlin-29eo</link>
      <guid>https://dev.to/ashokgelal/let-s-build-a-web-app-from-scratch-to-finish-with-alpas-and-kotlin-29eo</guid>
      <description>&lt;p&gt;&lt;a href="https://alpas.dev/"&gt;Alpas&lt;/a&gt; is a new web framework for developers who want to have a rapid, yet delightful, web application development experience using Kotlin.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://kotlinlang.org/"&gt;Kotlin&lt;/a&gt; is a general-purpose programming language with concise yet readable syntax. Its popularity is &lt;a href="https://explodingtopics.com/topic/kotlin"&gt;exploding&lt;/a&gt; making it one of the &lt;a href="https://octoverse.github.com/"&gt;fastest-growing languages&lt;/a&gt; according to GitHub. It's one of the &lt;a href="https://insights.stackoverflow.com/survey/2019#most-loved-dreaded-and-wanted"&gt;most loved languages&lt;/a&gt; according to Stack Overflow, and &lt;a href="https://www.businessinsider.com/kotlin-programming-language-explained-popularity-2019-5"&gt;used by companies big and small&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Kotlin is modern, fun, powerful, and delightful and so is Alpas. Kotlin &lt;a href="https://medium.com/signal-v-noise/kotlin-makes-me-a-happier-better-programmer-1fc668724563"&gt;makes you happy writing code&lt;/a&gt;, and Alpas strives to make you happy writing a web app.&lt;/p&gt;

&lt;p&gt;Kotlin's strong typing means you get to experience all the greatness of a statically typed language - great IDE support for code navigation, powerful debugging, fearless refactoring, and bugs that get caught at the compile-time and not at the time when your users are doing something critical.&lt;/p&gt;

&lt;p&gt;Kotlin's root in JVM and full interoperability with Java means you get to be a part of, arguably, the largest and the richest programming ecosystem of any language.&lt;/p&gt;




&lt;p&gt;Don't let the use of a statically typed language and the mention of JVM and Java fool you! I wouldn't blame you if you have tried some other Kotlin/JVM/Java frameworks and are burnt and defeated either by their sheer complexity because they are too big, or the lack of a coherent ecosystem because they are too small.&lt;/p&gt;

&lt;p&gt;Professionally and personally, I've experienced both kinds - one where a framework is so complex that getting started takes hours if not days, and the documentation is a maze full of technical jargons with no exit in sight.&lt;/p&gt;

&lt;p&gt;The worst is that they assume that you are already familiar with the Java ecosystem - beans, annotations, auto-wirings, thousands of lines of XML, properties, servlets, and factories, etc. They have a framework for a framework and a project generator!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/AANqYGD9LVsw8/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/AANqYGD9LVsw8/giphy.gif" alt="Me trying to use an existing Java web framework."&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;You may now have a fancy new weapon with Kotlin but you are still playing the same old game with too many rules and institutional knowledge. Well, that sucks! Why can't we have a new complete game designed just for the new weapon?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;On the other side of the tunnel, things are even worse. In the name of being light and micro, they let you get started but then leave you hanging when it comes to, say, templating, or database integration, or queues, or notifications, or sending emails, etc.&lt;/p&gt;

&lt;p&gt;They hand wave and tell you to go figure it out yourselves. Most of them would say "For this component, we don't want to make a choice for you. Here are 10 different libraries for getting this thing done; figure out the one you may want to use yourself."&lt;/p&gt;

&lt;p&gt;You are now left with so many choices with no clue on which one to pick and even if you were brave enough to pick one; you don't know whether or not you made a good choice.&lt;/p&gt;

&lt;p&gt;Making a decision is not only hard but is mentally taxing. It forces you to make irrational trade-offs. If you are new to the whole web development thing, then good luck with making a good choice when you are just trying to understand the basics.&lt;/p&gt;

&lt;p&gt;A motivated soul just wants to get a web project done, but now the poor soul is wandering in the hell of a rabbit hole. No wonder they end up using a subpar language because, well, people need to get shit done.&lt;/p&gt;




&lt;p&gt;Alpas avoids both extremes by including sane defaults and picking and packing the good stuff for you so you can get started and get going for the actual thing you are after - crafting a delightful app for your clients.&lt;/p&gt;

&lt;p&gt;It takes its inspirations from other delightful web frameworks like Laravel, Vapor, Rails, etc.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;In fact, if you have used the Laravel framework before, you will feel right at home with Alpas.&lt;/strong&gt; The core members of the framework have worked with Laravel for many years and wanted to bring a similar experience to Kotlin/Java world.&lt;/p&gt;

&lt;p&gt;I will not lie - Alpas still has &lt;a href="https://github.com/alpas/alpas/issues/6"&gt;some way to go&lt;/a&gt; before we have everything, but what it already has is good enough for building a complete web app. We have already used Alpas in writing 4 complete web apps that are in production right now.&lt;/p&gt;

&lt;p&gt;I could go on and on about &lt;a href="https://alpas.dev/"&gt;Alpas&lt;/a&gt;. But instead of just praising it, let's put it out for a real show for you to see and judge it yourself.&lt;br&gt;
In the next several blog posts we will use Alpas to write a complete web app from scratch to finish, which will demo some of its simplicity, delights, and power.&lt;/p&gt;

&lt;h3&gt;
  
  
  🔥 Building Fireplace
&lt;/h3&gt;

&lt;p&gt;The app we'll be building is a small but nonetheless a complete web app for managing projects. You can create an account, enforce users to verify their emails, add projects, add some tasks, and invite collaborators.&lt;br&gt;
I wanted to keep it small but also wanted to show some out-of-the-box features of Alpas - &lt;a href="https://alpas.dev/docs/authentication-scaffolding"&gt;auth scaffolding&lt;/a&gt;, &lt;a href="https://alpas.dev/docs/pebble-templates"&gt;templating&lt;/a&gt;, &lt;a href="https://alpas.dev/docs/notifications"&gt;notifications&lt;/a&gt;, &lt;a href="https://alpas.dev/docs/migrations"&gt;migrations&lt;/a&gt;, &lt;a href="https://alpas.dev/docs/routing"&gt;routing&lt;/a&gt;, &lt;a href="https://alpas.dev/docs/mail"&gt;mails&lt;/a&gt;, etc.&lt;/p&gt;

&lt;p&gt;If you want to play with the app first before you jump in, it's available at &lt;a href="https://fireplace.alpas.dev"&gt;https://fireplace.alpas.dev&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you want to read the source code, the complete &lt;a href="https://github.com/alpas/fireplace"&gt;source code is available on GitHub&lt;/a&gt;. We are already working on screencasts of this whole series and should be out soon. &lt;a href="https://twitter.com/alpasdev"&gt;Follow Alpas on Twitter&lt;/a&gt; to know when it is out.&lt;/p&gt;

&lt;p&gt;In the next post, we'll see how easy it is to get started with Alpas and how stupidly easy it is to scaffold an auth system with a single &lt;a href="https://alpas.dev/docs/alpas-console"&gt;Alpas console command&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I hope you will join me in the journey of this super fun exercise of writing a complete web app. I promise it will be fun and I'm confident that you will love the fun. After all, who doesn't love creating something from scratch for fun? We wouldn't call ourselves programmers if we didn't. Right?&lt;/p&gt;

&lt;p&gt;See you in the next one!&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>kotlin</category>
      <category>tutorial</category>
      <category>framework</category>
    </item>
  </channel>
</rss>
