<?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: ffex</title>
    <description>The latest articles on DEV Community by ffex (@ffex).</description>
    <link>https://dev.to/ffex</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%2F749438%2Fc07dca0a-b290-4e6d-a295-eeab7aba606a.jpeg</url>
      <title>DEV Community: ffex</title>
      <link>https://dev.to/ffex</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ffex"/>
    <language>en</language>
    <item>
      <title>DotTranscriber 🐰</title>
      <dc:creator>ffex</dc:creator>
      <pubDate>Tue, 31 Mar 2026 09:34:50 +0000</pubDate>
      <link>https://dev.to/ffex/dottranscriber-33of</link>
      <guid>https://dev.to/ffex/dottranscriber-33of</guid>
      <description>&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;p&gt;Talk about dot-transcriber, a side-(side-project) to be able to catch up on the travel time for my work. The ability to process voice messages and rewrite them as notes and get an AI second-brain.&lt;/p&gt;

&lt;p&gt;Github: &lt;a href="https://github.com/ffex/dot-transcriber" rel="noopener noreferrer"&gt;https://github.com/ffex/dot-transcriber&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  My needs
&lt;/h2&gt;

&lt;p&gt;I was late preparing my talk for &lt;a href="https://github.com/ffex/rust-boy" rel="noopener noreferrer"&gt;Rustboy&lt;/a&gt; (if you like gameboy check it!) at Fosdem, so I wanted to dedicate all my available time to finishing it. Can I also use the travel time to go to work? Was it possible to make that work?&lt;/p&gt;

&lt;p&gt;I definitely did not invent anything. I created an agent that turns an audio message (with the typical pauses or divergences of a creative mind process!) into structured notes (Obsidian style, which I love).&lt;/p&gt;

&lt;p&gt;The goal is also to run it locally using Whisper and Ollama. Here’s the current status:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Whisper for transcription&lt;/li&gt;
&lt;li&gt;Ollama (I need to find a model I’m satisfied with) for correction&lt;/li&gt;
&lt;li&gt;Corrected text is fed back into Ollama, which checks for relevance to previous notes so they can be linked.&lt;/li&gt;
&lt;li&gt;Communication via Telegram&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Clearly, this is all vibecoded because if I didn’t even have time for Rustboy, I certainly didn’t have time for this other project!&lt;/p&gt;

&lt;h2&gt;
  
  
  What I got
&lt;/h2&gt;

&lt;p&gt;A Telegram bot where I can send audio and receive linked notes as output, and also updated in case an update is needed. It works well, although the transcriptions are imprecise and the summaries are sometimes not very accurate.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I learned
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;I learned that with precise, bulleted prompts, the vibe coding is incredible and the output far exceeds the code I could have written.&lt;/li&gt;
&lt;li&gt;Sometimes the code, on the other hand, is underperforming or wrong!&lt;/li&gt;
&lt;li&gt;Reading all this code is mentally destructive.&lt;/li&gt;
&lt;li&gt;I learned that this is what the future is, even if some of our work is ripped away from us.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What scared me.
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;What am I needed for? Only to orchestrate?&lt;/li&gt;
&lt;li&gt;How do I intervene in the code if I haven’t read it?&lt;/li&gt;
&lt;li&gt;When I have so much code to read, how could I be in it without having read it?&lt;/li&gt;
&lt;li&gt;When getting down to the details, how can I become relevant to not just do prompt try-catching?&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What needs to be improved
&lt;/h2&gt;

&lt;p&gt;Things to improve:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Inaccurate local transcription&lt;/li&gt;
&lt;li&gt;Update of notes to keep more track of updates&lt;/li&gt;
&lt;li&gt;Logical confusion about how notes are connected&lt;/li&gt;
&lt;li&gt;In some notes, there is sometimes extreme syntax&lt;/li&gt;
&lt;li&gt;Better integrate my view of Claude Code’s work. How to do that? How to simplify reading the generated code?&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The future?
&lt;/h2&gt;

&lt;p&gt;The idea is just to make it a useful tool for marking notes via audio message for all those times when you can’t do anything but use your voice (driving, walking, or while playing sports?).&lt;/p&gt;

&lt;p&gt;It should be part of a much larger personal assistant, but for now, let’s stick to its task:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;transcribing audio and getting various types of processing:&lt;/li&gt;
&lt;li&gt;writing notes / wikis

&lt;ul&gt;
&lt;li&gt;writing tasks or structured projects&lt;/li&gt;
&lt;li&gt;writing articles&lt;/li&gt;
&lt;li&gt;other…&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;The initial idea actually originated also as “D&amp;amp;D Master Solo,” but that is another story.&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  Other consideration
&lt;/h2&gt;

&lt;p&gt;It is a project born before OpenClaw 🙃.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;I write this article to search a dialogue about coding agent, how do you use it? how to learn about the code that it writes? idk!&lt;/p&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>vibecoding</category>
      <category>sideprojects</category>
    </item>
    <item>
      <title>Appwrite x Angular - Act 0 - Authentication</title>
      <dc:creator>ffex</dc:creator>
      <pubDate>Wed, 22 Jan 2025 15:34:42 +0000</pubDate>
      <link>https://dev.to/ffex/appwrite-x-angular-act-0-authentication-560</link>
      <guid>https://dev.to/ffex/appwrite-x-angular-act-0-authentication-560</guid>
      <description>&lt;h3&gt;
  
  
  📒 Introduction
&lt;/h3&gt;

&lt;p&gt;In recent years, it has been difficult for me to participate in Hacktoberfest. There are so many people, so I'm having trouble finding tasks!&lt;/p&gt;

&lt;p&gt;But I want help! So, I participated in the Appwrite Hackathon 2024 at october, and it was amazing to see the news on the Appwrite product ( I have been a fan for a few years! ).&lt;/p&gt;

&lt;p&gt;I love Appwrite because it permits me to speed-coding some projects that I have in mind! I love that the idea can be real in a short time!&lt;/p&gt;

&lt;p&gt;In this trying (I didn't win) I saw only a few detailed tutorials on Appwrite so I decided to make one (using Angular as front-end)! &lt;/p&gt;

&lt;p&gt;Let's start!&lt;/p&gt;

&lt;h3&gt;
  
  
  💡 The project idea
&lt;/h3&gt;

&lt;p&gt;I recently started again to play D&amp;amp;D, I always loved to play a smart character, an inventor, or a mage so I had an idea: In the AI era I can record the session and transform it into a journal handmade by my character. &lt;/p&gt;

&lt;p&gt;🤓 &lt;strong&gt;Nerd note:&lt;/strong&gt; I like the idea that my gnome Artificier can create ( in automatic) a journal&lt;/p&gt;

&lt;h3&gt;
  
  
  💾 Tech stack
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Angular  v18&lt;/li&gt;
&lt;li&gt;Appwrite Cloud v1.6.0&lt;/li&gt;
&lt;li&gt;Primeng v18 as front-end framework&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🌃 Appwrite
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Create the project
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Click on "Create project"
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff36zssmhqz3buk7gqpvb.png" alt="Create project button" width="224" height="93"&gt;
&lt;/li&gt;
&lt;li&gt;Insert name and click "Next"
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flnooc07fp0s022mg3a9p.png" alt="fill the name field in a form" width="777" height="355"&gt;
&lt;/li&gt;
&lt;li&gt;Select the region
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq1ddegdaxwtqhqoxya50.png" alt="select the region where the appwrite server is" width="800" height="272"&gt;
&lt;/li&gt;
&lt;li&gt;Select the platform with you use the appwrite. In our case "Web". 
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fndjpsfbcy082nhw9zaxe.png" alt="Select a platform that use the appwrite services" width="800" height="397"&gt;
&lt;/li&gt;
&lt;li&gt;Compile all the information (Skip or compile all the optional step)
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7yq8nua7u81wdhxrcnac.png" alt="Fill fields in a form" width="800" height="512"&gt;
&lt;/li&gt;
&lt;li&gt;The project is ready!
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcpg9n0vv51m5fkckbbg0.png" alt="Screen about a ready project" width="800" height="347"&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Setup Authentication
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Go on Auth page
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1q27mx3l569kc2uxilrb.png" alt="Button menu to go at the Auth page" width="424" height="342"&gt;
&lt;/li&gt;
&lt;li&gt;Click on "Create User"
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8njk73u7787rcr7ul8f7.png" alt="Button to create a user" width="402" height="178"&gt;
&lt;/li&gt;
&lt;li&gt;Fill the data
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxhcoxjiu08jmkghv9vdf.png" alt="Form fields" width="689" height="679"&gt;
&lt;/li&gt;
&lt;li&gt;Ok! Done!&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🏙️ Angular app
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Create app
&lt;/h4&gt;

&lt;p&gt;Ok, now we have to create a new Angular App!&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Install if you don't have the Angular CLI:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;npm install -g @angular/cli
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;And create a new project
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;ng new &amp;lt;project-name&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;Start the project
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;npm start
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;and a framework for the UI, I like Primeng but you can install whatever you want
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;npm &lt;span class="nb"&gt;install &lt;/span&gt;primeng @primeng/themes
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;configure primeng: check &lt;code&gt;app.config.ts&lt;/code&gt; and &lt;code&gt;app.component.ts&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
  
  
  Create menu and Routing
&lt;/h4&gt;

&lt;p&gt;For my project, I set routing, an app page with the &lt;code&gt;&amp;lt;router-outlet&amp;gt;&lt;/code&gt; and with the PrimeNg menu, and a home page.  Maybe you set your project in a different way so you can jump to the next section!&lt;/p&gt;
&lt;h5&gt;
  
  
  AppComponent
&lt;/h5&gt;
&lt;h6&gt;
  
  
  app.component.ts
&lt;/h6&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;



&lt;h6&gt;
  
  
  app.component.html
&lt;/h6&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;h5&gt;
  
  
  Routing
&lt;/h5&gt;

&lt;h6&gt;
  
  
  app.routes.ts
&lt;/h6&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;h6&gt;
  
  
  app.config.ts
&lt;/h6&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;h4&gt;
  
  
  Create pages
&lt;/h4&gt;

&lt;p&gt;ok, now we have to do some pages.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;ng g component pages/home-page
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;ng g component pages/login-page
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;check next session for the code.&lt;/p&gt;
&lt;h5&gt;
  
  
  HomePage
&lt;/h5&gt;
&lt;h6&gt;
  
  
  home-page.component.ts
&lt;/h6&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;



&lt;h6&gt;
  
  
  home-page.component.html
&lt;/h6&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;h5&gt;
  
  
  LoginPage
&lt;/h5&gt;

&lt;h6&gt;
  
  
  login-page.component.ts
&lt;/h6&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;h6&gt;
  
  
  login-page.component.html
&lt;/h6&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;h4&gt;
  
  
  Angular: setup service
&lt;/h4&gt;

&lt;p&gt;Now we have  to prepare a service that contact the appwrite server and prepare a method to do the login:&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;REMEMBER TO SETUP THE &lt;a href="https://angular.dev/tools/cli/environments" rel="noopener noreferrer"&gt;ENVIRONMENT&lt;/a&gt; VARIABLES!&lt;/strong&gt; &lt;br&gt;
It's important to set the &lt;code&gt;environment.PROJECT_ID&lt;/code&gt; with the appwrite project Id (you can found it in the console near the project name)&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F49jh23yscaeoxbpdbsb2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F49jh23yscaeoxbpdbsb2.png" alt="Where to retrive project Id in appwrite" width="698" height="163"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  Angular: call authentication
&lt;/h4&gt;

&lt;p&gt;Now we rewrite the login function in the &lt;code&gt;login-page.component.ts&lt;/code&gt; to call the service method.&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;h3&gt;
  
  
  💫 Try it!
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Land in home page at &lt;code&gt;localhost:4200&lt;/code&gt;
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foiiuwi67p4n1ughs4j69.png" alt="Home page of the site" width="800" height="388"&gt;
&lt;/li&gt;
&lt;li&gt;select login
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0yfigus9f3eq8hx9si7t.png" alt="Button menu to go in the login page" width="284" height="126"&gt;
&lt;/li&gt;
&lt;li&gt;insert username and password
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk5nqw6c4l5w1g5fegqbo.png" alt="Login page" width="506" height="273"&gt;
&lt;/li&gt;
&lt;li&gt;You are logged in!
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F584luyaildloe4ijs905.png" alt="Home page logged in" width="272" height="163"&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🌟 Github Repository
&lt;/h2&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/ffex" rel="noopener noreferrer"&gt;
        ffex
      &lt;/a&gt; / &lt;a href="https://github.com/ffex/adventure-log-journal" rel="noopener noreferrer"&gt;
        adventure-log-journal
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/ffex/adventure-log-journal/blob/main/public/intero.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fffex%2Fadventure-log-journal%2Fraw%2Fmain%2Fpublic%2Fintero.png" alt="logo"&gt;&lt;/a&gt;
Small app to help with journaling and transcription of audio for tabletop roleplaying games.&lt;/p&gt;
&lt;p&gt;This project was generated with &lt;a href="https://github.com/angular/angular-cli" rel="noopener noreferrer"&gt;Angular CLI&lt;/a&gt; version 18.2.9.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Development server&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;Run &lt;code&gt;ng serve&lt;/code&gt; for a dev server. Navigate to &lt;code&gt;http://localhost:4200/&lt;/code&gt;. The application will automatically reload if you change any of the source files.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Code scaffolding&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;Run &lt;code&gt;ng generate component component-name&lt;/code&gt; to generate a new component. You can also use &lt;code&gt;ng generate directive|pipe|service|class|guard|interface|enum|module&lt;/code&gt;.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Build&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;Run &lt;code&gt;ng build&lt;/code&gt; to build the project. The build artifacts will be stored in the &lt;code&gt;dist/&lt;/code&gt; directory.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Running unit tests&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;Run &lt;code&gt;ng test&lt;/code&gt; to execute the unit tests via &lt;a href="https://karma-runner.github.io" rel="nofollow noopener noreferrer"&gt;Karma&lt;/a&gt;.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Running end-to-end tests&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;Run &lt;code&gt;ng e2e&lt;/code&gt; to execute the end-to-end tests via a platform of your choice. To use this command, you need to first add a package that implements end-to-end testing capabilities.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Further help&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;To get more help on the Angular CLI use &lt;code&gt;ng help&lt;/code&gt; or go check…&lt;/p&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/ffex/adventure-log-journal" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


</description>
      <category>appwritehack</category>
      <category>angular</category>
      <category>primeng</category>
      <category>hacktoberfest</category>
    </item>
    <item>
      <title>JourneyLog</title>
      <dc:creator>ffex</dc:creator>
      <pubDate>Sun, 19 Mar 2023 13:39:16 +0000</pubDate>
      <link>https://dev.to/ffex/journeylog-4330</link>
      <guid>https://dev.to/ffex/journeylog-4330</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Everything you need to plan your journeys&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  🤨 What is it?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk8hz4qpyj8ya2zfgat9p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk8hz4qpyj8ya2zfgat9p.png" alt="Refine banner for journeylog" width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
Journeylog is a webapp trip planner to simplify every task or annoying thing for a free traveler! &lt;br&gt;
I develop it recently to participate in a hackathon and I win one of the prizes giving me the enthusiasm to move on and continue to develop it! 😁&lt;/p&gt;
&lt;h2&gt;
  
  
  💭 Inspiration
&lt;/h2&gt;

&lt;p&gt;In September I went on a journey with my wife, we visited Spain. We rent a car and start the adventure! It was like an awesome movie, but in movies don't see what happened between the scenes... &lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fopp3q1xwcgoqyggxi24j.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fopp3q1xwcgoqyggxi24j.jpeg" alt="Artist in a trip!" width="800" height="600"&gt;&lt;/a&gt;&lt;br&gt;
Buy plane tickets, search on a few apps where to sleep the first night, search where and who is the best rental car service, check the first stop (which museum can we visit? where to eat? etc...), and go on, every day think the next day: search a b&amp;amp;b, where can we go, etc...&lt;/p&gt;

&lt;p&gt;So the idea! Nothing special or futuristic but simple and very helpful: a trip planner.&lt;/p&gt;

&lt;p&gt;This is the first part of a bigger project: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🗺️ This is the admin panel of the trip, where you can plan!&lt;/li&gt;
&lt;li&gt;📱 Another part will be an app to live the travel and update easy your current trip.&lt;/li&gt;
&lt;li&gt;👥 Last part is a social feature where you can share your experiences and trips.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  💡 Ideas and functionality
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpejdarfl2cmjd77vcim0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpejdarfl2cmjd77vcim0.png" alt="Admin panel" width="800" height="500"&gt;&lt;/a&gt;&lt;br&gt;
The main goal for this project is to create a trip in the easiest way possible! So:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create a new trip: travel dates, which vehicle used to first and last stops, etc...&lt;/li&gt;
&lt;li&gt;Pick up the map e place your stops&lt;/li&gt;
&lt;li&gt;Generate a list of stops with some information about every stop: how many nights in it, if you already booked, list of b&amp;amp;bs/hotels, list of museums, check-ins, etc...&lt;/li&gt;
&lt;li&gt;Generate a list of the route between every stop, which vehicle is used in it, how many hours and km for the route, etc...&lt;/li&gt;
&lt;li&gt;Generate a list of todos or add it manually (book the hotel, buy tickets, etc...)&lt;/li&gt;
&lt;li&gt;Write your logs and share them!&lt;/li&gt;
&lt;li&gt;Share the entire journey!&lt;/li&gt;
&lt;li&gt;Download in your phone your journeys and maps to use offline (maybe in a mountain? 🤔)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  💾 Tecnology Stack
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;ul&gt;
&lt;li&gt;For the back-end, I choose Appwrite because it is simple like the data to manage. 😉&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;For the front-end of the admin panel I choose React with Refine framework that speeds up the development of an admin panel and it works well with app write&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  🔓 Why open-source?
&lt;/h2&gt;

&lt;p&gt;Travel is a common activity of people and developers, so it would be interesting if everyone can put some useful ideas into the planner!&lt;br&gt;
So if you are interested in this project comment on this post with ideas!&lt;br&gt;
I never start an open-source project so if you have some tips and tricks to do well! 😉 (we need a community? how to collect ideas and suggestions? etc etc...&lt;/p&gt;
&lt;h2&gt;
  
  
  👣 Next steps
&lt;/h2&gt;

&lt;p&gt;Right now the project is in an early early early stage! I develop it fast for the Refine Hackathon, I need to optimize the code, write a better &lt;code&gt;README.md&lt;/code&gt; file and try to put some goals!&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/ffex" rel="noopener noreferrer"&gt;
        ffex
      &lt;/a&gt; / &lt;a href="https://github.com/ffex/JourneyLog" rel="noopener noreferrer"&gt;
        JourneyLog
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Everithing you need to plan your journeys! 
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="MD"&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/ffex/JourneyLog/blob/main/public/images/banner.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fffex%2FJourneyLog%2Fraw%2Fmain%2Fpublic%2Fimages%2Fbanner.png" alt="banner of the project"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;About&lt;/h1&gt;
&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Description&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;It is a simple webapp, SIMPLE must be the key! It have to help fast to plan a trip. Insert the name of the journey, some general informations (from and to dates, what vehicle use etc...).&lt;/p&gt;
&lt;p&gt;Second step is to choose stops with the help of Google maps API. It generate in automatic a list of the routes with distance and duration, to check it rapid.&lt;/p&gt;
&lt;p&gt;A useful dashboard resume all this things and get a simple autogenerate ToDo-list:&lt;/p&gt;
&lt;p&gt;buy plane ticket
rent a car
reserve an hotel or bnb every stops
etc
Every stop come with others helpfull informations (if you have done yet reservations, if you have complete yet!)&lt;/p&gt;
&lt;p&gt;You can also write a log! for your thoughts during the travel.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Partecipants&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;Me! &lt;a href="https://twitter.com/GreenCoreSoft" rel="nofollow noopener noreferrer"&gt;Twitter&lt;/a&gt; &lt;a href="https://github.com/ffex" rel="noopener noreferrer"&gt;Github&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Preview&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer nofollow" href="https://user-images.githubusercontent.com/23725091/221144324-2d3d41e7-ea42-4f9f-b319-6b982bd78a52.png"&gt;&lt;img width="1680" alt="Dashboard" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fuser-images.githubusercontent.com%2F23725091%2F221144324-2d3d41e7-ea42-4f9f-b319-6b982bd78a52.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer nofollow" href="https://user-images.githubusercontent.com/23725091/221144384-23c2ccef-99ad-4a2b-9546-bebd79273eb5.png"&gt;&lt;img width="1680" alt="Insert Stops" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fuser-images.githubusercontent.com%2F23725091%2F221144384-23c2ccef-99ad-4a2b-9546-bebd79273eb5.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer nofollow" href="https://user-images.githubusercontent.com/23725091/221144429-8d77f295-c1de-4254-add2-12ade3b632e0.png"&gt;&lt;img width="1680" alt="Calculated Routes" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fuser-images.githubusercontent.com%2F23725091%2F221144429-8d77f295-c1de-4254-add2-12ade3b632e0.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Set up Project&lt;/h2&gt;

&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Backend with &lt;a href="https://appwrite.io/" rel="nofollow noopener noreferrer"&gt;Appwrite&lt;/a&gt;
&lt;/h3&gt;

&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Install Appwrite by following the &lt;a href="https://appwrite.io/docs/installation" rel="nofollow noopener noreferrer"&gt;installation guide&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Open the Appwrite console and create…&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/ffex/JourneyLog" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;For now, it's all folks! 😁&lt;br&gt;
Stay tuned!&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>showdev</category>
      <category>react</category>
      <category>appwrite</category>
    </item>
    <item>
      <title>Monday Sticker Monday</title>
      <dc:creator>ffex</dc:creator>
      <pubDate>Mon, 13 Feb 2023 08:53:58 +0000</pubDate>
      <link>https://dev.to/ffex/monday-sticker-monday-4a8p</link>
      <guid>https://dev.to/ffex/monday-sticker-monday-4a8p</guid>
      <description>&lt;p&gt;In two years about contributing to opensource, hackaton, hacktoberfest... how much stickers! how to do with them?&lt;/p&gt;

&lt;p&gt;Sticker bombing the laptop, this is the awesome (in my opinion! 😁) result:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F357q40tesmajywqpvpnz.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F357q40tesmajywqpvpnz.jpeg" alt="closed laptop with stickers!" width="800" height="1066"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk7ydyif237ryii6f4af5.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk7ydyif237ryii6f4af5.jpeg" alt="opened laptop with stickers!" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It's monday, we are at work, we are a little bit bored. Share your stikerized laptop, or how do you use stickers that you won!😁&lt;/p&gt;

</description>
      <category>stickers</category>
      <category>casual</category>
      <category>gear</category>
      <category>swag</category>
    </item>
    <item>
      <title>Event OnDrop for PrimeNG Table</title>
      <dc:creator>ffex</dc:creator>
      <pubDate>Mon, 06 Feb 2023 18:28:42 +0000</pubDate>
      <link>https://dev.to/ffex/event-ondrop-for-primeng-table-24f0</link>
      <guid>https://dev.to/ffex/event-ondrop-for-primeng-table-24f0</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Hei there!&lt;br&gt;
I was working in a transport and logistic management system, in particular on a form to manage the delivery: which truck has to do delivery, which driver, when, which deliveries, etc.&lt;br&gt;
I used for it a PrimeNG table with the reorder property to assign deliveries to the trip but there are a few conditions that the PrimeNg table does not handle: some deliveries cannot be reordered.&lt;br&gt;
The order is important in a delivery trip and I cannot put a delivery not yet delivered before a delivered one.&lt;br&gt;
So I had to control the onDrop event of the table and can set up conditions, reject the reorder or accept it. The default PrimeNG table does not have this possibility and after a little research on the internet the only thing useful that I found was a comment in a PrimeNG forum: "play with the source code". So I play with that and I found a way!&lt;/p&gt;
&lt;h2&gt;
  
  
  PrimeNG Table
&lt;/h2&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;p-table&lt;/span&gt; &lt;span class="na"&gt;[value]=&lt;/span&gt;&lt;span class="s"&gt;"products"&lt;/span&gt; &lt;span class="na"&gt;[columns]=&lt;/span&gt;&lt;span class="s"&gt;"cols"&lt;/span&gt; &lt;span class="na"&gt;[reorderableColumns]=&lt;/span&gt;&lt;span class="s"&gt;"true"&lt;/span&gt; &lt;span class="na"&gt;[tableStyle]=&lt;/span&gt;&lt;span class="s"&gt;"{'min-width': '50rem'}"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;ng-template&lt;/span&gt; &lt;span class="na"&gt;pTemplate=&lt;/span&gt;&lt;span class="s"&gt;"header"&lt;/span&gt; &lt;span class="na"&gt;let-columns&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;tr&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;th&lt;/span&gt; &lt;span class="na"&gt;style=&lt;/span&gt;&lt;span class="s"&gt;"width:3rem"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/th&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;th&lt;/span&gt; &lt;span class="na"&gt;*ngFor=&lt;/span&gt;&lt;span class="s"&gt;"let col of columns"&lt;/span&gt; &lt;span class="na"&gt;pReorderableColumn&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
                {{col.header}}
            &lt;span class="nt"&gt;&amp;lt;/th&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;/tr&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/ng-template&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;ng-template&lt;/span&gt; &lt;span class="na"&gt;pTemplate=&lt;/span&gt;&lt;span class="s"&gt;"body"&lt;/span&gt; &lt;span class="na"&gt;let-rowData&lt;/span&gt; &lt;span class="na"&gt;let-columns=&lt;/span&gt;&lt;span class="s"&gt;"columns"&lt;/span&gt; &lt;span class="na"&gt;let-index=&lt;/span&gt;&lt;span class="s"&gt;"rowIndex"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;tr&lt;/span&gt; &lt;span class="na"&gt;[pReorderableRow]=&lt;/span&gt;&lt;span class="s"&gt;"index"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;td&amp;gt;&lt;/span&gt;
                &lt;span class="nt"&gt;&amp;lt;span&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"pi pi-bars"&lt;/span&gt; &lt;span class="na"&gt;pReorderableRowHandle&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/span&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;/td&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;td&lt;/span&gt; &lt;span class="na"&gt;*ngFor=&lt;/span&gt;&lt;span class="s"&gt;"let col of columns"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
                {{rowData[col.field]}}
            &lt;span class="nt"&gt;&amp;lt;/td&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;/tr&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/ng-template&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/p-table&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;This is a &lt;code&gt;p-table&lt;/code&gt; with the reorder row drag&amp;amp;drop property active. &lt;br&gt;
The &lt;code&gt;[pReorderableRow]="index"&lt;/code&gt; turn on the order ability of the table. &lt;br&gt;
The&lt;code&gt;&amp;lt;span class="pi pi-bars" pReorderableRowHandle&amp;gt;&amp;lt;/span&amp;gt;&lt;/code&gt; put a handle icon to perform the drag and drop.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkqrsxl3s2pz4pbwbab7t.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkqrsxl3s2pz4pbwbab7t.png" alt="drag and drop" width="800" height="562"&gt;&lt;/a&gt;&lt;br&gt;
So I started to search in PrimeNG code and I found a directive that implements this function on the table: &lt;code&gt;ReorderableRow&lt;/code&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  How to use it
&lt;/h2&gt;

&lt;p&gt;Ok, ok too long story, but how to use it?&lt;br&gt;
It's here! It's enough to copy this directive that extends the &lt;code&gt;ReorderableRow&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;ElementRef&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;EventEmitter&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;Input&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;NgZone&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;Output&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@angular/core&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Directive&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;HostListener&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@angular/core&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;ReorderableRow&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;Table&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;primeng/table&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;


&lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="nd"&gt;Directive&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;selector&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;[pReordableRowDrop]&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;ReordableRowDrop&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nc"&gt;ReorderableRow&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="nd"&gt;Input&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="kd"&gt;set&lt;/span&gt; &lt;span class="nf"&gt;pReordableRowDrop&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;index&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="nd"&gt;Output&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="nx"&gt;dropRow&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;EventEmitter&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kr"&gt;any&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="nx"&gt;override&lt;/span&gt; &lt;span class="nx"&gt;index&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;tmsEventDrop&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;any&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;dtDraggedRowIndex&lt;/span&gt;&lt;span class="p"&gt;?:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;dtDroppedRowIndex&lt;/span&gt;&lt;span class="p"&gt;?:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="nf"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="nx"&gt;override&lt;/span&gt; &lt;span class="nx"&gt;dt&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Table&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="nx"&gt;override&lt;/span&gt; &lt;span class="nx"&gt;el&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ElementRef&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="nx"&gt;override&lt;/span&gt; &lt;span class="nx"&gt;zone&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;NgZone&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;super&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;dt&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;el&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;zone&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="nx"&gt;override&lt;/span&gt; &lt;span class="nf"&gt;onDrop&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;any&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;

    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;isEnabled&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;dt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;rowDragging&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;dtDraggedRowIndex&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;dt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;draggedRowIndex&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;dtDroppedRowIndex&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;dt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;droppedRowIndex&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;dropIndex&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;dt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;draggedRowIndex&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;dt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;droppedRowIndex&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;dt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;droppedRowIndex&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;dt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;droppedRowIndex&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;dt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;droppedRowIndex&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

      &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;tmsEventDrop&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

      &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;eventArgs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;sender&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;draggedRowIndex&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;dt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;draggedRowIndex&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;droppedRowIndex&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;dropIndex&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;

      &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;dropRow&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;emit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;eventArgs&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;


    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;preventDefault&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="nf"&gt;acceptDrop&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;dt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;draggedRowIndex&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;dtDraggedRowIndex&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;dt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;droppedRowIndex&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;dtDroppedRowIndex&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;dt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;onRowDrop&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;tmsEventDrop&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;el&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;nativeElement&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="nf"&gt;rejectDrop&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;//cleanup&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;tmsEventDrop&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;dtDraggedRowIndex&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;undefined&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;dtDroppedRowIndex&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;undefined&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;dt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;onRowDragLeave&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;tmsEventDrop&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;el&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;nativeElement&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;dt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;onRowDragEnd&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;tmsEventDrop&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;This directive intercepts the OnDrop event of the table and implements an EventEmitter that raises an event at the exterior. &lt;br&gt;
&lt;code&gt;acceptDrop()&lt;/code&gt; and &lt;code&gt;rejectDrop()&lt;/code&gt; are methods that continue the normal flow of a reorder, the first one is to accept the reorder, and the second one is to reject because there are some mandatory operations to do.&lt;/p&gt;

&lt;p&gt;Copy this directive into your projects and add it to the declarations in the module.&lt;/p&gt;

&lt;p&gt;Now overwrite the &lt;code&gt;p-table&lt;/code&gt;, in particulary replace &lt;code&gt;[pReorderableRow]="index"&lt;/code&gt; with &lt;code&gt;[pReordableRowDrop]="index" (dropRow)="onDropRow($event)"&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt; &lt;span class="nt"&gt;&amp;lt;p-table&lt;/span&gt; &lt;span class="na"&gt;[value]=&lt;/span&gt;&lt;span class="s"&gt;"products"&lt;/span&gt; &lt;span class="na"&gt;[columns]=&lt;/span&gt;&lt;span class="s"&gt;"cols"&lt;/span&gt; &lt;span class="na"&gt;[reorderableColumns]=&lt;/span&gt;&lt;span class="s"&gt;"true"&lt;/span&gt; &lt;span class="na"&gt;[tableStyle]=&lt;/span&gt;&lt;span class="s"&gt;"{'min-width': '50rem'}"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;ng-template&lt;/span&gt; &lt;span class="na"&gt;pTemplate=&lt;/span&gt;&lt;span class="s"&gt;"header"&lt;/span&gt; &lt;span class="na"&gt;let-columns&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;tr&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;th&lt;/span&gt; &lt;span class="na"&gt;style=&lt;/span&gt;&lt;span class="s"&gt;"width:3rem"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/th&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;th&lt;/span&gt; &lt;span class="na"&gt;style=&lt;/span&gt;&lt;span class="s"&gt;"width:3rem"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;#&lt;span class="nt"&gt;&amp;lt;/th&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;th&lt;/span&gt; &lt;span class="na"&gt;*ngFor=&lt;/span&gt;&lt;span class="s"&gt;"let col of columns"&lt;/span&gt; &lt;span class="na"&gt;pReorderableColumn&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
          {{col.header}}
        &lt;span class="nt"&gt;&amp;lt;/th&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/tr&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/ng-template&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;ng-template&lt;/span&gt; &lt;span class="na"&gt;pTemplate=&lt;/span&gt;&lt;span class="s"&gt;"body"&lt;/span&gt; &lt;span class="na"&gt;let-rowData&lt;/span&gt; &lt;span class="na"&gt;let-columns=&lt;/span&gt;&lt;span class="s"&gt;"columns"&lt;/span&gt; &lt;span class="na"&gt;let-index=&lt;/span&gt;&lt;span class="s"&gt;"rowIndex"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;tr&lt;/span&gt; &lt;span class="na"&gt;[pReordableRowDrop]=&lt;/span&gt;&lt;span class="s"&gt;"index"&lt;/span&gt; &lt;span class="na"&gt;(dropRow)=&lt;/span&gt;&lt;span class="s"&gt;"onDropRow($event)"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;td&amp;gt;&lt;/span&gt;
          &lt;span class="nt"&gt;&amp;lt;span&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"pi pi-bars"&lt;/span&gt; &lt;span class="na"&gt;pReorderableRowHandle&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/span&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;/td&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;td&amp;gt;&lt;/span&gt;
          {{index}}
        &lt;span class="nt"&gt;&amp;lt;/td&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;td&lt;/span&gt; &lt;span class="na"&gt;*ngFor=&lt;/span&gt;&lt;span class="s"&gt;"let col of columns"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
          {{rowData[col.field]}}
        &lt;span class="nt"&gt;&amp;lt;/td&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/tr&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/ng-template&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/p-table&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;and finally manage the &lt;code&gt;onDropRow($event)&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;  &lt;span class="nf"&gt;onDropRow&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;any&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;products&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;draggedRowIndex&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;deliveryStatusCode&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;50&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;products&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;droppedRowIndex&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;deliveryStatusCode&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;sender&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;acceptDrop&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
      &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;logs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`SUCCESS: Reordered &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;products&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;draggedRowIndex&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; in position &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;droppedRowIndex&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;.`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;sender&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;rejectDrop&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
      &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;logs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`FAILED: Impossibile move &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;products&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;draggedRowIndex&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; in position &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;droppedRowIndex&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;. One of those items was delivered yet. :(`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;IMPORTANT:&lt;/strong&gt; it is very mandatory to add an &lt;code&gt;e.sender.acceptDrop();&lt;/code&gt; or &lt;code&gt;e.sender.rejectDrop();&lt;/code&gt; otherwise the table have some bugs.&lt;/p&gt;
&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;This is a reference of a complete example project to use this directive:&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/ffex" rel="noopener noreferrer"&gt;
        ffex
      &lt;/a&gt; / &lt;a href="https://github.com/ffex/prime-ng-table-drop-event" rel="noopener noreferrer"&gt;
        prime-ng-table-drop-event
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;PrimeNg Table Drop Event Example&lt;/h1&gt;
&lt;/div&gt;

&lt;p&gt;This project is an example of how to override the OnDrop function in a PrimeNg table; the new onDrop raises an event so you can, in every component you want, put conditions to accept or reject the reorder.&lt;/p&gt;

&lt;p&gt;This project was generated with &lt;a href="https://github.com/angular/angular-cli" rel="noopener noreferrer"&gt;Angular CLI&lt;/a&gt; version 15.1.3 and &lt;a href="https://github.com/primefaces/primeng" rel="noopener noreferrer"&gt;PrimeNG&lt;/a&gt; version 15.1.1.&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;How to use in your Project&lt;/h2&gt;
&lt;/div&gt;

&lt;ol&gt;
&lt;li&gt;You can use this in a Angular with PrimeNg project.&lt;/li&gt;
&lt;li&gt;The only file you need is &lt;a href="https://github.com/ffex/prime-ng-table-drop-eventsrc/app/reordable-row-drop.directive.ts" rel="noopener noreferrer"&gt;reordable-row-drop.directive.ts&lt;/a&gt;, copy that in your angular project
&lt;ul&gt;
&lt;li&gt;NOTE: Add it in the module declarations&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;replace the PrimeNg default &lt;code&gt;[pReorderableRow]="index"&lt;/code&gt; with the custom one &lt;code&gt;[pReordableRowDrop]="index" (dropRow)="onDropRow($event)"&lt;/code&gt;. Example:&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="snippet-clipboard-content notranslate position-relative overflow-auto"&gt;
&lt;pre class="notranslate"&gt;&lt;code&gt;  &amp;lt;p-table [value]="products" [columns]="cols" [reorderableColumns]="true" [tableStyle]="{'min-width': '50rem'}"&amp;amp;gt
    &amp;lt;ng-template pTemplate="header" let-columns&amp;gt;
      &amp;lt;tr&amp;gt;
        &amp;lt;th style="width:3rem"&amp;gt;&amp;lt;/th&amp;gt;
        &amp;lt;th style="width:3rem"&amp;gt;#&amp;lt;/th&amp;gt;
        &amp;lt;th *ngFor="let col of columns" pReorderableColumn&amp;gt;
          {{col.header}}
        &amp;lt;/th&amp;gt;
      &amp;lt;/tr&amp;gt;
    &amp;lt;/ng-template&amp;gt;
    &amp;lt;ng-template pTemplate="body" let-rowData let-columns="columns" let-index="rowIndex"&amp;gt;
      &amp;lt;tr [pReordableRowDrop]="index" (dropRow)="onDropRow($event)"&amp;gt;
        &amp;lt;td&amp;gt;
          &amp;lt;span class="pi pi-bars" pReorderableRowHandle&amp;gt;&amp;lt;/span&amp;gt;
        &amp;lt;/td&amp;gt;
        &amp;lt;td&amp;gt;
          {{index}}
        &amp;lt;/td&amp;gt;
        &amp;lt;td *ngFor="let col&lt;/code&gt;&lt;/pre&gt;…&lt;/div&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/ffex/prime-ng-table-drop-event" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;



&lt;p&gt;It's all folks! Bye!&lt;/p&gt;

</description>
      <category>angular</category>
      <category>tutorial</category>
      <category>programming</category>
      <category>primeng</category>
    </item>
    <item>
      <title>CookOverflow - a place where share your recipe</title>
      <dc:creator>ffex</dc:creator>
      <pubDate>Thu, 12 May 2022 23:50:40 +0000</pubDate>
      <link>https://dev.to/ffex/cookoverflow-a-place-where-share-your-recipe-1gjj</link>
      <guid>https://dev.to/ffex/cookoverflow-a-place-where-share-your-recipe-1gjj</guid>
      <description>&lt;h3&gt;
  
  
  Overview of My Submission
&lt;/h3&gt;

&lt;p&gt;Very often I use websites to find some new recipe to try (cook and eat!) and very often I don't have in my fridge the ingredients 🤔&lt;/p&gt;

&lt;p&gt;Here the idea! A Stackoverflow like website where the people can ask recipes to other people! No perfect "Chef recipe", but something personal, something that is write in a old grandma recipes book!&lt;/p&gt;

&lt;p&gt;The project is in a very very early stage, it something like a pre-demo. It's awesome work with appwrite and see the project grow really really fast (To do this I work on it something like only 20 hours!!)&lt;/p&gt;

&lt;p&gt;It is very funny work with appwrite and learn to use this powerful backend environment for side project (I have a lot of side projets idea!🤪).&lt;/p&gt;

&lt;p&gt;The base feature right now are: login, write a post with the choose of ingredients, write recipes easy to answer the post.&lt;br&gt;
The complete idea is to do a system of ranking (for user, for recipe, for post) to do monthly challenge and maybe gain some  prizes! Maybe an app ("Grandma Recipes Book" for example) with the bests recipes ordered by month, year, all time.&lt;/p&gt;

&lt;p&gt;It is developed with AppWrite for the backend using:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Log with OAuth2 by Google&lt;/li&gt;
&lt;li&gt;Database functions: List, Query, Create, Update...&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For the frontend I used Angular and PrimeNg, and it perfect to fast the work!&lt;/p&gt;

&lt;p&gt;In the repo there is (under directory "util") a little script in python to do massive insert of the ingredients.&lt;/p&gt;
&lt;h3&gt;
  
  
  Submission Category:
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Web2 Wizards&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Link to Code
&lt;/h3&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/ffex" rel="noopener noreferrer"&gt;
        ffex
      &lt;/a&gt; / &lt;a href="https://github.com/ffex/cook-overflow" rel="noopener noreferrer"&gt;
        cook-overflow
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;CookOverflow&lt;/h1&gt;

&lt;/div&gt;
&lt;p&gt;This project was generated with &lt;a href="https://github.com/angular/angular-cli" rel="noopener noreferrer"&gt;Angular CLI&lt;/a&gt; version 13.3.4.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Development server&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;Run &lt;code&gt;ng serve&lt;/code&gt; for a dev server. Navigate to &lt;code&gt;http://localhost:4200/&lt;/code&gt;. The application will automatically reload if you change any of the source files.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Code scaffolding&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;Run &lt;code&gt;ng generate component component-name&lt;/code&gt; to generate a new component. You can also use &lt;code&gt;ng generate directive|pipe|service|class|guard|interface|enum|module&lt;/code&gt;.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Build&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;Run &lt;code&gt;ng build&lt;/code&gt; to build the project. The build artifacts will be stored in the &lt;code&gt;dist/&lt;/code&gt; directory.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Running unit tests&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;Run &lt;code&gt;ng test&lt;/code&gt; to execute the unit tests via &lt;a href="https://karma-runner.github.io" rel="nofollow noopener noreferrer"&gt;Karma&lt;/a&gt;.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Running end-to-end tests&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;Run &lt;code&gt;ng e2e&lt;/code&gt; to execute the end-to-end tests via a platform of your choice. To use this command, you need to first add a package that implements end-to-end testing capabilities.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Further help&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;To get more help on the Angular CLI use &lt;code&gt;ng help&lt;/code&gt; or go check out the &lt;a href="https://angular.io/cli" rel="nofollow noopener noreferrer"&gt;Angular CLI Overview and Command Reference&lt;/a&gt; page.&lt;/p&gt;
&lt;/div&gt;



&lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/ffex/cook-overflow" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;h3&gt;
  
  
  Additional Resources / Info
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://foodb.ca/" rel="noopener noreferrer"&gt;FoodDB&lt;/a&gt;, for the ingredients list.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.primefaces.org/primeng/" rel="noopener noreferrer"&gt;PrimeNG&lt;/a&gt; for the amazing angular components.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Screenshots/demo videos are encouraged!
&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;Homepage&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0xgn9vizxf1yframnzfw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0xgn9vizxf1yframnzfw.png" alt="home page" width="800" height="369"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Login!&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmvk13kcymvr0yjgibx5m.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmvk13kcymvr0yjgibx5m.png" alt="login" width="524" height="443"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Create a post!&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgpstgjejiigvuyivh7fm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgpstgjejiigvuyivh7fm.png" alt="create a post" width="800" height="366"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Choose ingredients&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8w5auixrso32vlp0n1ym.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8w5auixrso32vlp0n1ym.png" alt="choose ingredients" width="800" height="342"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Check the post with recipes list by other users&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdgob6t03zujy1cyhyvbq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdgob6t03zujy1cyhyvbq.png" alt="check post" width="800" height="313"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Create a recipe!!!&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F49eqxxsjyckx8lh0fsls.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F49eqxxsjyckx8lh0fsls.png" alt="create a recipe" width="800" height="438"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkwqvdbl0nzfiiymkk00n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkwqvdbl0nzfiiymkk00n.png" alt="create a recipe" width="800" height="421"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Check recipes&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6r1pt9gf9353sibn34bd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6r1pt9gf9353sibn34bd.png" alt="check recipes" width="800" height="408"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwzdifz74o9900jpol2et.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwzdifz74o9900jpol2et.png" alt="check recipes" width="800" height="407"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>appwritehack</category>
      <category>angular</category>
    </item>
    <item>
      <title>Day 3-4-5-6: DB, create, list,query...</title>
      <dc:creator>ffex</dc:creator>
      <pubDate>Wed, 11 May 2022 10:45:26 +0000</pubDate>
      <link>https://dev.to/ffex/day-3-4-5-6-db-create-listquery-1amc</link>
      <guid>https://dev.to/ffex/day-3-4-5-6-db-create-listquery-1amc</guid>
      <description>&lt;p&gt;In this days I studied a little bit the NoSql DB logics, I ever work with relationship DB and this open my mind! 😁&lt;/p&gt;

&lt;p&gt;I redo the new DB schema in appwrite with nosql logics, And I started to implement something!&lt;/p&gt;

&lt;p&gt;The main idea for the project was to create a mini-recipes-social where the people can post the ingredients that have and other people share his recipes with this ingredients.&lt;/p&gt;

&lt;p&gt;You can vote the post-question you can vote the recipe, you can chose the best recipes, any user have a ranking, etc...&lt;/p&gt;

&lt;p&gt;Do you know Stackoverflow? 😁 the idea is the same but with recipes!&lt;/p&gt;

&lt;p&gt;this is the home page:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq0gy7deepzbs2iescyel.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq0gy7deepzbs2iescyel.png" alt="homepage" width="800" height="344"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;and this the creation of the post:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi8ywkt5dd1qfvbvgud7v.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi8ywkt5dd1qfvbvgud7v.png" alt="post creation" width="800" height="405"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And now? answer the question with recipes!&lt;/p&gt;

</description>
      <category>appwritehack</category>
      <category>angular</category>
      <category>nosql</category>
    </item>
    <item>
      <title>Day 1-2: Authentication!</title>
      <dc:creator>ffex</dc:creator>
      <pubDate>Fri, 06 May 2022 18:06:14 +0000</pubDate>
      <link>https://dev.to/ffex/day-1-2-authentication-9i</link>
      <guid>https://dev.to/ffex/day-1-2-authentication-9i</guid>
      <description>&lt;p&gt;It's amazing the semplicity to do this part with google OAuth2... Here it is:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Home Page&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flw0laim7ta5e1ysyhgnn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flw0laim7ta5e1ysyhgnn.png" alt="Home page" width="800" height="326"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Login Page&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6f8me9hxn7exrcij3fy8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6f8me9hxn7exrcij3fy8.png" alt="LoginPage" width="800" height="745"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Authenticated Page&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1mw18rj23rsmenrute2o.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1mw18rj23rsmenrute2o.png" alt="Authenticated Home" width="800" height="227"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I follow this tutorial et voilà!&lt;br&gt;
&lt;a href="https://www.youtube.com/watch?v=KYrOoyvycAM" rel="noopener noreferrer"&gt;Lerndemy Tutorial&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I had a few diffulty with the promise call and organize angular code, but it is ok for now!&lt;br&gt;
In the next post I reveal the theme of my project...&lt;/p&gt;

</description>
      <category>appwritehack</category>
      <category>hackaton</category>
      <category>angular</category>
    </item>
    <item>
      <title>Day 0: Brainstorming!</title>
      <dc:creator>ffex</dc:creator>
      <pubDate>Mon, 02 May 2022 07:32:42 +0000</pubDate>
      <link>https://dev.to/ffex/day-0-brainstorming-3po</link>
      <guid>https://dev.to/ffex/day-0-brainstorming-3po</guid>
      <description>&lt;p&gt;Maybe I'm a little bit too late but I want to partecipate at the Hackaton! 🙂&lt;/p&gt;

&lt;p&gt;The day 0 was brainstorming, find a good idea, start to write the DB and the webpages!&lt;/p&gt;

&lt;p&gt;I'll hope to complete the project! I have a very low freetime but it's ok! 🙂&lt;/p&gt;

</description>
      <category>appwritehack</category>
      <category>hackaton</category>
      <category>angular</category>
      <category>brainstorm</category>
    </item>
    <item>
      <title>Can I be a 90's developer in 2022?</title>
      <dc:creator>ffex</dc:creator>
      <pubDate>Mon, 25 Apr 2022 14:22:09 +0000</pubDate>
      <link>https://dev.to/ffex/can-i-be-a-90s-developer-in-2022-4k28</link>
      <guid>https://dev.to/ffex/can-i-be-a-90s-developer-in-2022-4k28</guid>
      <description>&lt;p&gt;This morning I found this &lt;strong&gt;Amiga 500+&lt;/strong&gt; in my uncle loft, my first thought was "Wow! I have to try it"&lt;/p&gt;

&lt;p&gt;Since I was a child I ever a passion of computers (specially old!), videogames and development and I have a very creative mind (sometimes too much!!). Today don't have much time to spend on the amiga (I have to do some boring job stuff for tomorrow!) but an idea growth in my mind...&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can be interesting develop a 90's videogame for the amiga in 2022? Maybe copy some videogame of this era. How about GTAV for amiga? Or maybe Farming simulator for amiga? Or Terraria maybe?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I don't know the answer so I decided to write a post here, and ask you developers if it is a good idea! &lt;/p&gt;

&lt;p&gt;I don't know if it is interesting or maybe someone do that yet, please share your thought, maybe I can do a series of videos of this adventure, maybe there is someone 90's game developer that read this post and can share advise for this.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;It's a crazy idea maybe&lt;/em&gt;, but &lt;strong&gt;I like to learn somethings new&lt;/strong&gt;! &lt;/p&gt;

</description>
      <category>retro</category>
      <category>gamedev</category>
      <category>retrogames</category>
      <category>challenge</category>
    </item>
  </channel>
</rss>
