<?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: Amey Sunu</title>
    <description>The latest articles on DEV Community by Amey Sunu (@ameysunu).</description>
    <link>https://dev.to/ameysunu</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%2F459351%2F4702067a-dd02-4b44-a070-d64449312655.jpg</url>
      <title>DEV Community: Amey Sunu</title>
      <link>https://dev.to/ameysunu</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ameysunu"/>
    <language>en</language>
    <item>
      <title>CloudStroll - Redis Challenge</title>
      <dc:creator>Amey Sunu</dc:creator>
      <pubDate>Fri, 08 Aug 2025 08:10:32 +0000</pubDate>
      <link>https://dev.to/ameysunu/cloudstroll-redis-challenge-en5</link>
      <guid>https://dev.to/ameysunu/cloudstroll-redis-challenge-en5</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/redis-2025-07-23"&gt;Redis AI Challenge&lt;/a&gt;: Real-Time AI Innovators&lt;/em&gt;.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;CloudStroll&lt;/strong&gt; is a travel-journaling app that captures every moment of your trip—location, text notes, mood, weather, and makes them instantly searchable, mappable, and analyzable in real time.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Create &amp;amp; Store Memories&lt;/strong&gt;
Each memory is saved as a RedisJSON document with fields for &lt;code&gt;location&lt;/code&gt;, &lt;code&gt;entry&lt;/code&gt;, &lt;code&gt;mood&lt;/code&gt;, &lt;code&gt;weather&lt;/code&gt;, &lt;code&gt;timestamp&lt;/code&gt;, &lt;code&gt;uid&lt;/code&gt; and an embedding vector.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tag &amp;amp; Full-Text Search&lt;/strong&gt;
Instantly filter by mood or keyword with RediSearch’s TAG and TEXT indexes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Geo-Search &amp;amp; Map View&lt;/strong&gt;
Geo-index every entry so you can find things “within 5 km of me” or pan/zoom on an interactive map.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Semantic Search&lt;/strong&gt;
You can turn your search (ex: "hot sun") into an embedding and run a KNN vector search to retrieve memories that talk about beaches, coastlines, or sunsets—even if they never explicitly say "beach"&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mood Trends&lt;/strong&gt;
Stream mood counts into RedisTimeSeries and display beautiful charts to show how your emotional journey evolved over time.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All of this is powered by a single Redis 8 deployment—no separate cache, search engine, or time-series database.&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;Github&lt;/em&gt; - &lt;a href="https://github.com/ameysunu/cloudstroll-redishack" rel="noopener noreferrer"&gt;https://github.com/ameysunu/cloudstroll-redishack&lt;/a&gt;&lt;br&gt;
&lt;em&gt;YouTube&lt;/em&gt; - &lt;a href="https://youtu.be/A5UaeEVElyg" rel="noopener noreferrer"&gt;https://youtu.be/A5UaeEVElyg&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  How I Used Redis 8
&lt;/h2&gt;
&lt;h3&gt;
  
  
  1. RedisJSON
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Storage:&lt;/strong&gt; Each memory as a JSON doc under &lt;code&gt;memory:&amp;lt;id&amp;gt;&lt;/code&gt;.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Updates:&lt;/strong&gt; After computing embeddings, I update the vector field:
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;  JSON.SET memory:&amp;lt;&lt;span class="nb"&gt;id&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nv"&gt;$.&lt;/span&gt;embedding &lt;span class="s2"&gt;"&amp;lt;json-array-of-floats&amp;gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  2. RediSearch V8
&lt;/h3&gt;

&lt;p&gt;I created a unified JSON index for tags, text, and vectors:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;FT.CREATE memory-idx ON JSON PREFIX 1 &lt;span class="s2"&gt;"memory:"&lt;/span&gt; SCHEMA &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nv"&gt;$.&lt;/span&gt;uid       AS uid     TAG &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nv"&gt;$.&lt;/span&gt;mood      AS mood    TAG &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nv"&gt;$.&lt;/span&gt;entry     AS entry   TEXT &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nv"&gt;$.&lt;/span&gt;embedding AS vec     VECTOR FLAT 6 &lt;span class="se"&gt;\&lt;/span&gt;
    TYPE FLOAT32 DIM 384 DISTANCE_METRIC COSINE

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

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;TAG Queries&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;FT.SEARCH memory-idx &lt;span class="s2"&gt;"@mood:{happy}"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;TEXT Queries&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;FT.SEARCH memory-idx &lt;span class="s2"&gt;"@entry:beach"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;KNN Vector Queries&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;FT.SEARCH memory-idx &lt;span class="s2"&gt;"* =&amp;gt; [KNN 5 @vec &lt;/span&gt;&lt;span class="nv"&gt;$BLOB&lt;/span&gt;&lt;span class="s2"&gt;]"&lt;/span&gt; DIALECT 2 &lt;span class="se"&gt;\&lt;/span&gt;
  PARAMS 2 BLOB &amp;lt;binary-blob&amp;gt; &lt;span class="se"&gt;\&lt;/span&gt;
  RETURN 1 &lt;span class="s2"&gt;"$"&lt;/span&gt; LIMIT 0 5
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3. RedisTimeSeries
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;Track per-mood counts in real time&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;TS.CREATE mood:trend:&amp;lt;mood&amp;gt; RETENTION 0 LABELS mood &amp;lt;mood&amp;gt;
TS.ADD   mood:trend:&amp;lt;mood&amp;gt; &lt;span class="k"&gt;*&lt;/span&gt; 1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;Power the trend chart after&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;TS.RANGE mood:trend:happy 2025-07-01 2025-08-07
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  4. GeoIndexing
&lt;/h3&gt;

&lt;p&gt;Each memory is geo-indexed for location search&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;GEOADD memory:geo &amp;lt;lon&amp;gt; &amp;lt;lat&amp;gt; memory:&amp;lt;&lt;span class="nb"&gt;id&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
GEOSEARCH memory:geo FROMLONLAT &amp;lt;lon&amp;gt; &amp;lt;lat&amp;gt; BYRADIUS 5 km
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  5. RealTime AI Flows
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Semantic Search&lt;/em&gt;: External embedding service to store vector in RedisJSON FT.SEARCH KNN on @vec to find semantically similar memories.&lt;/p&gt;

&lt;h2&gt;
  
  
  Stack
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Frontend&lt;/strong&gt; - I used SwiftUI to build the mobile app for iOS.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Backend&lt;/strong&gt; - I built the backend with Go, and hosted it on Google Cloud Run&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Misc&lt;/strong&gt; - Google Cloud, Redis (of course), Firebase Auth, Hugging Face (for generating embedding)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Architecture
&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%2F4308v9yyki85vw8f9sk6.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%2F4308v9yyki85vw8f9sk6.png" alt=" " width="800" height="385"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Screenshots
&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%2F6ncgpdfmvljzjm8wd30d.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%2F6ncgpdfmvljzjm8wd30d.png" alt=" " width="750" height="1570"&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%2F0rtk4rvezbn860fmb1xx.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%2F0rtk4rvezbn860fmb1xx.png" alt=" " width="750" height="1570"&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%2Fjnimeskjf2e596sie923.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%2Fjnimeskjf2e596sie923.png" alt=" " width="750" height="1570"&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%2F7dqsbrmnz6gm5rq0yk6e.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%2F7dqsbrmnz6gm5rq0yk6e.png" alt=" " width="750" height="1570"&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%2F25hono8ojv4wvtyhnklz.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%2F25hono8ojv4wvtyhnklz.png" alt=" " width="750" height="1570"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Notes
&lt;/h2&gt;

&lt;p&gt;To build the app, clone the code, build it using Xcode. For &lt;code&gt;Secrets.xcconfig&lt;/code&gt;, please email me privately, and I'll send that over. Install this onto a simulator or an actual device for testing. For any bugs encountered, please feel free to open an Issue and raise a PR on my Git Repo&lt;/p&gt;

</description>
      <category>redischallenge</category>
      <category>devchallenge</category>
      <category>database</category>
      <category>ai</category>
    </item>
    <item>
      <title>TuneSnap using Flutter SDK for iOS - Linode + DEV Hackathon</title>
      <dc:creator>Amey Sunu</dc:creator>
      <pubDate>Sun, 19 Feb 2023 11:20:56 +0000</pubDate>
      <link>https://dev.to/ameysunu/tunesnap-using-flutter-sdk-for-ios-linode-dev-hackathon-165o</link>
      <guid>https://dev.to/ameysunu/tunesnap-using-flutter-sdk-for-ios-linode-dev-hackathon-165o</guid>
      <description>&lt;h2&gt;
  
  
  What I built
&lt;/h2&gt;

&lt;p&gt;I created an iOS app using Flutter, Linode services - Linode, Object Storage, MySQL database, Spotify API, and Python. &lt;/p&gt;

&lt;p&gt;The main goal of the app is to take a picture of a user in their current mood, and then recommend some songs to help them calm, relax or even get some new cool songs for their playlist.&lt;/p&gt;

&lt;p&gt;I've personally felt that, when I sometimes feel sad, or get angry, music is the best therapist and this was the main reason why I could relate to this project and make the best out of it.&lt;/p&gt;

&lt;h3&gt;
  
  
  Category Submission:
&lt;/h3&gt;

&lt;p&gt;Integration Innovators&lt;/p&gt;

&lt;h3&gt;
  
  
  App Link
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/ameysunu/linode_flutter" rel="noopener noreferrer"&gt;https://github.com/ameysunu/linode_flutter&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Clone the project, and install all the dependencies for Flutter by running &lt;code&gt;flutter pub get&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Once done, create a &lt;code&gt;secrets.dart&lt;/code&gt; file within the folder &lt;code&gt;controllers&lt;/code&gt; and add in all the needed API keys, which can be retrieved from Linode, and Linode MySQL Databse.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Screenshots
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Linode Emotion Analysis output&lt;/em&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%2Fhbx43m9aqi4olvv5l99o.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%2Fhbx43m9aqi4olvv5l99o.png" alt="emotion analysis sample output" width="800" height="500"&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%2Fkns4fo0sqmadtwf0yi35.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%2Fkns4fo0sqmadtwf0yi35.png" alt="emotion analyser" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Linode Spotify API token retrieval&lt;/em&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%2F0n1zugkhyvaomh1oi39i.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%2F0n1zugkhyvaomh1oi39i.png" alt="retrieve spotify api" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Generate token and add to .env file&lt;/em&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%2Fpuyhjaiu0sd0to8lymd1.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%2Fpuyhjaiu0sd0to8lymd1.png" alt="Token generation" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Linode Object Storage Bucket&lt;/em&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%2Fd03634dcw9hwo9uo88tw.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%2Fd03634dcw9hwo9uo88tw.png" alt="Object Storage" width="800" height="468"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Linode Server&lt;/em&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%2F9gdpkpy7aps15fk586c2.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%2F9gdpkpy7aps15fk586c2.png" alt="Linode Server" width="800" height="468"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Linode MySQL Server&lt;/em&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%2Fcba1y1v0c5floxizihrg.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%2Fcba1y1v0c5floxizihrg.png" alt="Linode MySQL Server" width="800" height="468"&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%2Fic8n0gjp4x9f3vls7iib.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%2Fic8n0gjp4x9f3vls7iib.png" alt="MySQL Workbench" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Flutter App Screenshots&lt;/em&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%2Fiv83z156x2e3xlaktovo.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%2Fiv83z156x2e3xlaktovo.png" alt="Home Screen" width="800" height="1733"&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%2F9spfdyhmdign82xp6vmr.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%2F9spfdyhmdign82xp6vmr.png" alt="Analyser" width="800" height="1733"&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%2Fmvoxnn39bty7m36e7c21.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%2Fmvoxnn39bty7m36e7c21.png" alt="Mood" width="800" height="1733"&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%2Fzmpi1dpad5dudtbetp08.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%2Fzmpi1dpad5dudtbetp08.png" alt="Loader" width="800" height="1733"&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%2Ftos7jk93711s1vdrgngk.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%2Ftos7jk93711s1vdrgngk.png" alt="Songs and mood" width="800" height="1733"&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%2Fqdedmoi76u5uwgvegl53.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%2Fqdedmoi76u5uwgvegl53.png" alt="Saved SQL usermood" width="800" height="1733"&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%2Fsun18ipap7jh9aszl71f.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%2Fsun18ipap7jh9aszl71f.png" alt="Saved SQL songdata" width="800" height="1733"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here's a video showing some preview of how the app works:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://youtu.be/R7fBcWT9vE4" rel="noopener noreferrer"&gt;https://youtu.be/R7fBcWT9vE4&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Description
&lt;/h3&gt;

&lt;p&gt;The project aims to provide users with a list of songs depending on the user's current mood to give them something to relax or even get a lot of new songs depending on your mood. &lt;/p&gt;

&lt;p&gt;All the user needs to do is simply log in, take a photo or upload one if their device doesn't support a camera hardware and then voila, they simply wait for their song list and it can even be saved within the app, for listening to later.&lt;/p&gt;

&lt;h3&gt;
  
  
  Link to Source 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/ameysunu" rel="noopener noreferrer"&gt;
        ameysunu
      &lt;/a&gt; / &lt;a href="https://github.com/ameysunu/linode_flutter" rel="noopener noreferrer"&gt;
        linode_flutter
      &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;linode_flutter&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;A new Flutter project.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Getting Started&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;This project is a starting point for a Flutter application.&lt;/p&gt;
&lt;p&gt;A few resources to get you started if this is your first Flutter project:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.flutter.dev/get-started/codelab" rel="nofollow noopener noreferrer"&gt;Lab: Write your first Flutter app&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.flutter.dev/cookbook" rel="nofollow noopener noreferrer"&gt;Cookbook: Useful Flutter samples&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For help getting started with Flutter development, view the
&lt;a href="https://docs.flutter.dev/" rel="nofollow noopener noreferrer"&gt;online documentation&lt;/a&gt;, which offers tutorials
samples, guidance on mobile development, and a full API reference.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Setting up Python API for Emotion Analysis&lt;/h2&gt;

&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Deploy the code on Linode instance.&lt;/li&gt;
&lt;li&gt;Use &lt;code&gt;ngrok&lt;/code&gt; to port forward from the Linode instance, to localhost the Jupyter environment for working on the code.&lt;/li&gt;
&lt;li&gt;Once done, run the API by running &lt;code&gt;python3 api-emotion.py&lt;/code&gt; which will run this on localhost within the Linode instance.&lt;/li&gt;
&lt;li&gt;Use &lt;code&gt;ngrok&lt;/code&gt; to pass the parameter of the url instance and get the response. Example:&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="snippet-clipboard-content notranslate position-relative overflow-auto"&gt;&lt;pre class="notranslate"&gt;&lt;code&gt;https://efac-2a01-7e00-00-f03c-93ff-fe62-8edd.eu.ngrok.io/detect_emotions?url_address=https://s.yimg.com/ny/api/res/1.2/sOY7KfVwt6fGSxZyPnFRvA--/YXBwaWQ9aGlnaGxhbmRlcjt3PTk2MDtoPTU4NjtjZj13ZWJw/https://media.zenfs.com/en-US/homerun/uproxx_movies_881/f2218a32e3820c6d1b4a4502cba1e377

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Uploading image to Linode Bucket&lt;/h2&gt;

&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Replace the access keys, and regions in &lt;code&gt;bucket-upload.py&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Run the python file…&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/ameysunu/linode_flutter" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;h3&gt;
  
  
  Permissive License
&lt;/h3&gt;

&lt;p&gt;MIT License 2023&lt;/p&gt;

&lt;h2&gt;
  
  
  Background
&lt;/h2&gt;

&lt;p&gt;I've personally felt that music helps people a lot, especially if their mood is a little down. And I thought why not use this opportunity to give users a chance to get to know about some new songs, listen to them, and even save them to the app so that users can always access to those.&lt;/p&gt;

&lt;h3&gt;
  
  
  How I built it
&lt;/h3&gt;

&lt;p&gt;I built this with Flutter SDK for iOS, using Firebase Authentication and of course, Linode services. &lt;/p&gt;

&lt;p&gt;How? -&amp;gt; I used three of Linode Services: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Linode - I created a Linode, and developed a Python program using machine learning libraries such as &lt;code&gt;fer&lt;/code&gt; which is made using &lt;code&gt;keras&lt;/code&gt; and &lt;code&gt;tensorflow&lt;/code&gt; for facial recognition. I then used &lt;code&gt;flask&lt;/code&gt; to make an API for POST request to upload images from the mobile device using &lt;code&gt;nginx&lt;/code&gt;. The images were being saved on Linode, and to improve this, I created another Python program using &lt;code&gt;flask&lt;/code&gt; which first uploads the image to Linode Object Storage and then progresses that to our emotion analyzer python code.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Linode Object Storage - The images used for facial recognition are stored on Linode Object Storage to avoid image cluttering on the Linode server and makes it very easy for computation and execution.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Linode Database MySQL - Using Flutter and Dart code, the data is saved to a Linode MySQL database. I've been quite rough with SQL, hence I needed a lot of brushing up to use different tables and perform a ton of CRUD operation.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It was my first time using Linode, and it was really easy to integrate all of Linode services to make this project work bit faster and on time, of course my favorite part is that it's very easy to use FaaS within Linode, and there was no downtime at all.&lt;/p&gt;

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

&lt;p&gt;It was a lot of fun to develop and create this project, but there are a few things I'd like to mention. &lt;/p&gt;

&lt;p&gt;It was my first time doing a machine learning project, so I had to go through a lot of documentation, and stackoverflow while making this project. I even had my fears since not all computers supported tensorflow modules for GPU operations, but that was not at all the case with Linode. I had decided to use &lt;code&gt;ngrok&lt;/code&gt; so that I could do &lt;code&gt;POST&lt;/code&gt; and &lt;code&gt;GET&lt;/code&gt; request to get response from the Linode server, and hence that turned out be not the best solution at all, two reasons why:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;ngrok&lt;/code&gt; free version only allows to expose one localhost url and port to the public. I had two of them -&amp;gt; One was the uploader to Linode Object Storage, and the other was the emotion analyzer.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;There was a timeout and everytime, I load the server and expose the url to public, it changes. Hence, it was hard for me to continuously put the URL everytime in my Flutter code and reload the application.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Hence, using &lt;code&gt;nginx&lt;/code&gt; , &lt;code&gt;gunicorn3&lt;/code&gt; and &lt;code&gt;flask&lt;/code&gt;, I could make &lt;code&gt;POST&lt;/code&gt; and &lt;code&gt;GET&lt;/code&gt; requests to the Linode's IP address directly, hence making it easy for me (as a developer) to focus on my Flutter code rather than having to spend hours to start &lt;code&gt;ngrok&lt;/code&gt; everytime and then use a different URL. &lt;/p&gt;

&lt;p&gt;After getting this sorted, an another issue was Spotify's API token. Spotify's API would expire after 3600 seconds or 1 hour. Hence, replacing the Spotify API everytime I work on the app was not an ideal solution. &lt;/p&gt;

&lt;p&gt;So I came up with a solution. I created an &lt;code&gt;.env&lt;/code&gt; file on my Linode server to store my Spotify token, and then wrote a Python script that would generate a Spotify token based of on my Spotify Client and Secret ID every 45 minutes, and then replace that with the token on &lt;code&gt;.env&lt;/code&gt; file. The app could fetch token on the &lt;code&gt;.env&lt;/code&gt; file using a simple &lt;code&gt;GET&lt;/code&gt; to the Linode server.&lt;/p&gt;

&lt;p&gt;There was also a python program that runs every 1 hour to delete all the images from the Linode Object Storage, of course for privacy reasons.&lt;/p&gt;

&lt;p&gt;Long story short, these were just a few tiny challenges I faced, and it was really easy for me to focus on coming up with  solutions rather than worrying about my downtime, server restrictions, or SQL Database as it was all backed up by Linode.&lt;/p&gt;

</description>
      <category>linodehackathon</category>
      <category>flutter</category>
      <category>ios</category>
    </item>
    <item>
      <title>Letters App using Flutter SDK for iOS - MongoDB Atlas Hackathon 2022</title>
      <dc:creator>Amey Sunu</dc:creator>
      <pubDate>Thu, 08 Dec 2022 19:06:11 +0000</pubDate>
      <link>https://dev.to/ameysunu/mongodb-atlas-hackathon-2022-on-dev-1a0f</link>
      <guid>https://dev.to/ameysunu/mongodb-atlas-hackathon-2022-on-dev-1a0f</guid>
      <description>&lt;h2&gt;
  
  
  What I built
&lt;/h2&gt;

&lt;p&gt;I created an iOS application using Flutter, MongoDB Atlas, and MongoDB Realm Auth. The goal of the app is to communicate to people all over the world with random things happening around you. In other words, its a "Letter", which is sent out to the world, and all the registered users can see this, react to this, comment and have fun.&lt;/p&gt;

&lt;h3&gt;
  
  
  Category Submission:
&lt;/h3&gt;

&lt;p&gt;Think Outside the JS Box &lt;/p&gt;

&lt;h3&gt;
  
  
  App Link
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/ameysunu/mongodb_flutter" rel="noopener noreferrer"&gt;https://github.com/ameysunu/mongodb_flutter&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Clone the project, and install all the dependencies for Flutter by running &lt;code&gt;flutter pub get&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Go the folder &lt;code&gt;ios&lt;/code&gt; and run the &lt;code&gt;Runner.xcworkspace&lt;/code&gt; on Xcode&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;You can use the user &lt;a href="mailto:testuser@test.com"&gt;testuser@test.com&lt;/a&gt; and password as 123456, since the authentication is built with MongoDB Realm Authentication.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Screenshots
&lt;/h3&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%2F6fjqarnqbzu8af7sig4g.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%2F6fjqarnqbzu8af7sig4g.png" alt="Login Screen" width="800" height="1734"&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%2Fe2fko1xylslkhamqrb2l.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%2Fe2fko1xylslkhamqrb2l.png" alt="Home Screen" width="800" height="1734"&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%2F6e8iolotjtq4kl8q7kqz.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%2F6e8iolotjtq4kl8q7kqz.png" alt="Dashboard" width="800" height="1734"&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%2Fwy93l2n18zbmzy4payz4.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%2Fwy93l2n18zbmzy4payz4.png" alt="Profile Details" width="800" height="1734"&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%2Frc1h5ud5hiei5c98noul.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%2Frc1h5ud5hiei5c98noul.png" alt="Create a Letter" width="800" height="1734"&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%2F7b8pz1hc1dnq1j2bzymr.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%2F7b8pz1hc1dnq1j2bzymr.png" alt="Update letter" width="800" height="1734"&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%2Fxi6vsp6b91fhp1p7ak19.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%2Fxi6vsp6b91fhp1p7ak19.png" alt="Global Letters" width="800" height="1734"&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%2Fl2vwz7afoe4ymn26iw1i.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%2Fl2vwz7afoe4ymn26iw1i.png" alt="A Sample Letter" width="800" height="1734"&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%2F3ry3ri6uros7dkb4ywxb.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%2F3ry3ri6uros7dkb4ywxb.png" alt="Comments" width="800" height="1734"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Description
&lt;/h3&gt;

&lt;p&gt;This project aims to connect people throughout the world with little hilarious things that happen in life, just like Twitter. Users can log into the app and create a letter and choose the option if they want to make it private or public. Private letters cannot been seen by others. Don't worry, you always have the option to update your letters. Once, the letter is out there, people can react, and comment on it, and the best part is, only you can see it. It's a fun way of knowing various things happening throughout the world.&lt;/p&gt;

&lt;h3&gt;
  
  
  Link to Source 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/ameysunu" rel="noopener noreferrer"&gt;
        ameysunu
      &lt;/a&gt; / &lt;a href="https://github.com/ameysunu/mongodb_flutter" rel="noopener noreferrer"&gt;
        mongodb_flutter
      &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;mongodb_flutter&lt;/h1&gt;

&lt;/div&gt;
&lt;p&gt;A new Flutter project.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Getting Started&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;This project is a starting point for a Flutter application.&lt;/p&gt;
&lt;p&gt;A few resources to get you started if this is your first Flutter project:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.flutter.dev/get-started/codelab" rel="nofollow noopener noreferrer"&gt;Lab: Write your first Flutter app&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.flutter.dev/cookbook" rel="nofollow noopener noreferrer"&gt;Cookbook: Useful Flutter samples&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For help getting started with Flutter development, view the
&lt;a href="https://docs.flutter.dev/" rel="nofollow noopener noreferrer"&gt;online documentation&lt;/a&gt;, which offers tutorials,
samples, guidance on mobile development, and a full API reference.&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/ameysunu/mongodb_flutter" 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;
  
  
  Permissive License
&lt;/h3&gt;

&lt;p&gt;MIT License 2022&lt;/p&gt;

&lt;h2&gt;
  
  
  Background
&lt;/h2&gt;

&lt;p&gt;Sometimes people are always held by their intrusive thoughts and feel scared to express themselves on social media with the worry of being bullied. This app allows them to write whatever they want, and nobody can bully them as users have total control over what they write. Comments and replies are only visible to you, and not to others. &lt;/p&gt;

&lt;p&gt;It's a fun and cool way of knowing about various things happening around you, and sometimes smallest of the smallest things can make you happy when you are in a busy stressful day.&lt;/p&gt;

&lt;h3&gt;
  
  
  How I built it
&lt;/h3&gt;

&lt;p&gt;I used MongoDB Atlas, and Realm Auth for authentication. I thought of going with a different authentication and then decided to use Realm, because it would be really easy to integrate Realm Auth data with MongoDB atlas, while creating records pertaining to users.&lt;/p&gt;

&lt;p&gt;I used Flutter SDK for developing the application for iOS, and used MongoDB Atlas for CRUD operations throughout the application. &lt;/p&gt;

&lt;p&gt;I learnt about MongoDB Atlas, and this was my first time integrating this with Flutter as a database operations, and I really liked it a lot. I had a few struggles here and there, but made it eventually. I had to cut short my project a little bit, and wanted to add other little more features, but even after the hackathon, I'll be working on the project more, making it better and adding in new features.&lt;/p&gt;

&lt;p&gt;Thanks MongoDB and DEV team for introducing this hackathon to me! :)&lt;/p&gt;

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

</description>
      <category>atlashackathon22</category>
      <category>flutter</category>
      <category>ios</category>
    </item>
    <item>
      <title>Hear Me - Azure Trial Hackathon</title>
      <dc:creator>Amey Sunu</dc:creator>
      <pubDate>Tue, 08 Mar 2022 23:41:39 +0000</pubDate>
      <link>https://dev.to/ameysunu/hear-me-azure-trial-hackathon-2cb</link>
      <guid>https://dev.to/ameysunu/hear-me-azure-trial-hackathon-2cb</guid>
      <description>&lt;h3&gt;
  
  
  Overview of My Submission
&lt;/h3&gt;

&lt;p&gt;The application converts images to text and then to speech. The main target audience for this application would be visually impaired, who shall use the Braille technology inbuilt within iOS such that they can convert images to speech in realtime.&lt;/p&gt;

&lt;h3&gt;
  
  
  Submission Category:
&lt;/h3&gt;

&lt;p&gt;AI Aces&lt;/p&gt;

&lt;h3&gt;
  
  
  Link to Code on GitHub
&lt;/h3&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--566lAguM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/ameysunu"&gt;
        ameysunu
      &lt;/a&gt; / &lt;a href="https://github.com/ameysunu/trialhack"&gt;
        trialhack
      &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;h1&gt;
HearMe&lt;/h1&gt;
&lt;p&gt;Speechify text from images, using Microsoft Azure Cognitive Services.&lt;/p&gt;
&lt;h2&gt;
Getting Started&lt;/h2&gt;
&lt;p&gt;The application uses Microsoft's Azure cognitive services to convert text from images and then synthesise the text to speech. Microsoft Azure Translation Service is also added to the code base.&lt;/p&gt;
&lt;h2&gt;
Screenshots&lt;/h2&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/ameysunu/trialhack"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;h3&gt;
  
  
  Permissive License
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/ameysunu/trialhack/blob/master/LICENSE"&gt;MIT License&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;The application is made using SwiftUI, Azure Cognitive Services, Computer Vision, Firebase and Google Authentication. The app converts text to image, and then converts it to audio. A translate feature was also added to the code, however not implemented, due to time constraints. The translation was handled by Azure Cognitive Services.&lt;/p&gt;

&lt;h3&gt;
  
  
  Screenshots
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--gqLtwV6a--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ve626hcyndh21vc4781i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--gqLtwV6a--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ve626hcyndh21vc4781i.png" alt="Welcome Screen" width="880" height="1904"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--7_7ptAwS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rzzdh3yzjymhu7ke7zv2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--7_7ptAwS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rzzdh3yzjymhu7ke7zv2.png" alt="Google Sign in" width="880" height="1904"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--IGQcVA_---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qy1nf3jvk7773etfsxrj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--IGQcVA_---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qy1nf3jvk7773etfsxrj.png" alt="Home" width="880" height="1904"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--1fKpMGvq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0prbv7e2sml99yfefvhw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--1fKpMGvq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0prbv7e2sml99yfefvhw.png" alt="Image uploaded" width="880" height="1904"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--9Pbo8VuW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2qmih91txtn97myyaqia.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--9Pbo8VuW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2qmih91txtn97myyaqia.png" alt="Audio Analyzed" width="880" height="1904"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--3lRpQbCL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ggb6obuo58d6tsjehiwk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--3lRpQbCL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ggb6obuo58d6tsjehiwk.png" alt="User Page" width="880" height="1904"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>azuretrialhack</category>
      <category>swiftui</category>
      <category>azure</category>
    </item>
    <item>
      <title>xChange-MongoDB Realm and SwiftUI</title>
      <dc:creator>Amey Sunu</dc:creator>
      <pubDate>Thu, 13 Jan 2022 22:42:45 +0000</pubDate>
      <link>https://dev.to/ameysunu/xchange-mongodb-realm-and-swiftui-34d4</link>
      <guid>https://dev.to/ameysunu/xchange-mongodb-realm-and-swiftui-34d4</guid>
      <description>&lt;h3&gt;
  
  
  Overview of My Submission
&lt;/h3&gt;

&lt;p&gt;xChange is an app designed in SwiftUI for iOS that helps meet users from different parts of the globe. It uses “Letter”, in which users can create letters, through which users can share their thoughts and feelings as notes to which users within the local region can react and get in touch with. Users with premium features can get access to the global feature where they can interact with letters all over the globe. The app uses MongoDB Realm for authentication and CRUD operations as local persistence storage, and is deployed on to MongoDB Atlas whenever a trigger to the app is viewed. The app mainly focuses on how people can interact with each other, merely based on their thoughts. &lt;/p&gt;

&lt;h3&gt;
  
  
  Submission Category:
&lt;/h3&gt;

&lt;p&gt;Action Star&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/ameysunu" rel="noopener noreferrer"&gt;
        ameysunu
      &lt;/a&gt; / &lt;a href="https://github.com/ameysunu/xchange" rel="noopener noreferrer"&gt;
        xchange
      &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;h2 class="heading-element"&gt;xChange&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;xChange is an app designed in SwiftUI for iOS that helps meet users from different parts of the globe. It uses “Letter”, in which users can create letters, through which users can share their thoughts and feelings as notes to which users within the local region can react and get in touch with. Users with premium features can get access to the global feature where they can interact with letters all over the globe. The app uses MongoDB Realm for authentication and CRUD operations as local persistence storage, and is deployed on to MongoDB Atlas whenever a trigger to the app is viewed. The app mainly focuses on how people can interact with each other, merely based on their thoughts.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Tools Used&lt;/h2&gt;

&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;SwiftUI&lt;/li&gt;
&lt;li&gt;MongoDB Realm&lt;/li&gt;
&lt;li&gt;MapKit and CoreLocation&lt;/li&gt;
&lt;/ul&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/ameysunu/xchange" 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;p&gt;The application uses MapKit, and CoreLocation for determining current location using Apple Maps to analyse the current location of users to deploy the letter in such a way that it binds the users of the same location. Using Realm, the data is bound with local CoreData within the iPhone and can be deployed to MongoDB Atlas. &lt;/p&gt;

&lt;h4&gt;
  
  
  Future Work
&lt;/h4&gt;

&lt;p&gt;Using Artificial Intelligence, illegitimate users shall be removed. The AI will also monitor and handle abusive images, and NSFW content.&lt;/p&gt;

&lt;h4&gt;
  
  
  Screenshots
&lt;/h4&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%2Fbqzp1mi3d34j0rfiitgl.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%2Fbqzp1mi3d34j0rfiitgl.png" alt="Home" width="800" height="1731"&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%2Ftk1el1rxxblb4sil6sd9.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%2Ftk1el1rxxblb4sil6sd9.png" alt="Upload" width="800" height="1731"&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%2Fsgqqbcyvjewm5531zjsm.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%2Fsgqqbcyvjewm5531zjsm.png" alt="Letters" width="800" height="1731"&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%2F4dhwd7z6s8s5l6234w00.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%2F4dhwd7z6s8s5l6234w00.png" alt="Realm" width="800" height="497"&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%2Fmxbw4k52qa49rqacjef6.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%2Fmxbw4k52qa49rqacjef6.png" alt="Premium" width="800" height="1731"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>atlashackathon</category>
    </item>
    <item>
      <title>Running Flutter Tests using Github Actions</title>
      <dc:creator>Amey Sunu</dc:creator>
      <pubDate>Mon, 22 Nov 2021 13:15:09 +0000</pubDate>
      <link>https://dev.to/ameysunu/running-flutter-tests-using-github-actions-310n</link>
      <guid>https://dev.to/ameysunu/running-flutter-tests-using-github-actions-310n</guid>
      <description>&lt;h3&gt;
  
  
  My Workflow
&lt;/h3&gt;

&lt;p&gt;My workflow is a testing parameter for Flutter Apps, and I made it for my Flutter package which allows seamless integration of wit.ai with Flutter. The workflow runs a flutter test, that checks if there is a valid response from the wit.ai server, whenever there is push or pull request to the master branch.&lt;/p&gt;

&lt;h3&gt;
  
  
  Submission Category:
&lt;/h3&gt;

&lt;p&gt;Phone Friendly&lt;/p&gt;

&lt;h3&gt;
  
  
  Yaml File or 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/ameysunu" rel="noopener noreferrer"&gt;
        ameysunu
      &lt;/a&gt; / &lt;a href="https://github.com/ameysunu/flutter_witai" rel="noopener noreferrer"&gt;
        flutter_witai
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Integrating wit.ai with Flutter for structured response based on your query.
    &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;Flutter wit.ai Package&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a href="https://codemagic.io/apps/60cd6d74ab51634d70139dae/60cd6d74ab51634d70139dad/latest_build" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/1a574415b0a5259437d3ebfb79d0d1780881f9af1f8ea2b352b63e272cae6bde/68747470733a2f2f6170692e636f64656d616769632e696f2f617070732f3630636436643734616235313633346437303133396461652f3630636436643734616235313633346437303133396461642f7374617475735f62616467652e737667" alt="Codemagic build status"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;wit.ai is a natural language interface for statements into structured data. This package helps get a structured data from wit.ai console as per the trained utterance for Flutter. You can read a lot more about wit.ai and its documentation &lt;a href="https://wit.ai" rel="nofollow noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Feel free to hit me up with PR for any issues and further improvements for this package.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Getting Started&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;Begin by importing the package into your &lt;code&gt;dart&lt;/code&gt; file.&lt;/p&gt;
&lt;div class="snippet-clipboard-content notranslate position-relative overflow-auto"&gt;&lt;pre class="notranslate"&gt;&lt;code&gt;import 'package:flutter_witai/flutter_witai.dart'
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Create an object wit from the package's &lt;code&gt;WitManager&lt;/code&gt; option. WitManager has three parameters, namely  &lt;code&gt;params&lt;/code&gt;, &lt;code&gt;utterance&lt;/code&gt; and &lt;code&gt;headers&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Within &lt;code&gt;utterance&lt;/code&gt;, add your utterance text for which the data has to be generated, and within &lt;code&gt;headers&lt;/code&gt; add your &lt;code&gt;Server Access Token&lt;/code&gt; which can be retrieved from wit.ai settings console. &lt;code&gt;params&lt;/code&gt; is the GET parameter for accessing various HTTP APIs. Various parameters for the retrieval of HTTP API can be viewed below.&lt;/p&gt;
&lt;div class="snippet-clipboard-content notranslate position-relative overflow-auto"&gt;
&lt;pre class="notranslate"&gt;&lt;code&gt;    final wit =&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/ameysunu/flutter_witai" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;&lt;em&gt;YAML File:&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;name: Flutter Test
on:
  push:
    branches: [ master ]
  pull_request:
    branches: [ master ]

  workflow_dispatch:

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v2
      - uses: actions/setup-java@v2
        with:
          distribution: 'zulu'
          java-version: '11'
      - uses: subosito/flutter-action@v1
        with:
          flutter-version: '2.0.5'

      - name: Get all Flutter Packages
        run: flutter pub get

      - name: Run a multi-line script
        run: flutter test
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;p&gt;Shoutout to &lt;a href="https://github.com/marketplace/actions/flutter-action" rel="noopener noreferrer"&gt;Flutter Actions&lt;/a&gt; for helping me with the workflow analysis.&lt;/p&gt;

</description>
      <category>actionshackathon21</category>
      <category>flutter</category>
    </item>
    <item>
      <title>Integrating wit.ai with Flutter</title>
      <dc:creator>Amey Sunu</dc:creator>
      <pubDate>Mon, 21 Jun 2021 05:27:13 +0000</pubDate>
      <link>https://dev.to/ameysunu/integrating-wit-ai-with-flutter-3hmp</link>
      <guid>https://dev.to/ameysunu/integrating-wit-ai-with-flutter-3hmp</guid>
      <description>&lt;h2&gt;
  
  
  wit.ai
&lt;/h2&gt;

&lt;p&gt;wit.ai is a NLP engine by Facebook that allows users to convert statements into a queried structural data hence allowing developers to build conversational applications such as chatbots.&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%2Fcabr3y3x2yqc0n1ou6fg.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%2Fcabr3y3x2yqc0n1ou6fg.png" alt="Logo" width="400" height="96"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To get started you can simply visit &lt;a href="https://wit.ai" rel="noopener noreferrer"&gt;wit.ai&lt;/a&gt; and login with your existing Facebook account. You can also make the use of amazing &lt;a href="https://wit.ai/docs" rel="noopener noreferrer"&gt;documentation&lt;/a&gt; provided by the wit.ai team.&lt;/p&gt;

&lt;h2&gt;
  
  
  Integration
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;To add wit.ai to your Flutter app, simply install the &lt;a href="https://pub.dev/packages/flutter_witai" rel="noopener noreferrer"&gt;flutter_witai&lt;/a&gt; package from pub.dev.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Now create a wit object and set it to the &lt;code&gt;WitManager&lt;/code&gt; class from the package, which consists of 2 parameters namely &lt;code&gt;utterance&lt;/code&gt;, &lt;code&gt;headers&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;final wit = WitManager(utterance: "hello",headers: "XXXXXXXXXX");
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Utterance will be your query statement for which you'd be creating a structured data response and headers will be the wit.ai project &lt;code&gt;SERVER ACCESS TOKEN&lt;/code&gt; which can be found in the settings.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Call the &lt;code&gt;fetchLink()&lt;/code&gt; function to trigger the wit.ai function and get the structured JSON response based on whatever utterance query you mentioned.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;wit.fetchLink();
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;You can view the results by printing out the json to the console, by setting the &lt;code&gt;fetchLink()&lt;/code&gt; function to a dynamic variable
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;dynamic response = await wit.fetchLink();
print(response);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The response should look somewhat 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;{"text":"hello","intents":[{"id":"985952918880417","name":"search","confidence":1}],"entities":{},"traits":{"wit$sentiment":[{"id":"5ac2b50a-44e4-466e-9d49-bad6bd40092c","value":"positive","confidence":0.5435}]}}

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

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;You can now get any values from the response json, such as entities, traits or any such values.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;print(response['entities']);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It's that simple. You can create any Flutter button such as TextButton and then simply call the function within it's &lt;code&gt;onPressed&lt;/code&gt; parameter to call the wit.ai function. Also remember to use the &lt;code&gt;async&lt;/code&gt; keyword for asynchronous operations.&lt;/p&gt;

&lt;p&gt;You can also take a look at the &lt;a href="https://pub.dev/packages/flutter_witai/example" rel="noopener noreferrer"&gt;example&lt;/a&gt; code written in the package.&lt;/p&gt;

</description>
      <category>flutter</category>
      <category>witai</category>
    </item>
    <item>
      <title>Dockerize your Flutter App</title>
      <dc:creator>Amey Sunu</dc:creator>
      <pubDate>Sun, 21 Feb 2021 20:07:09 +0000</pubDate>
      <link>https://dev.to/ameysunu/dockerize-your-flutter-app-3feg</link>
      <guid>https://dev.to/ameysunu/dockerize-your-flutter-app-3feg</guid>
      <description>&lt;p&gt;Docker is a platform that delivers software in containers and usually uses OS-level virtualization. &lt;/p&gt;

&lt;h2&gt;
  
  
  The Need
&lt;/h2&gt;

&lt;p&gt;Of course, the first question to pop up is the need. Why do we need Docker for Flutter Apps? Well, here it is, as Flutter Developers, we know the hardship of setting up Flutter SDK to Android SDK, Java, and whatnot. With Docker, we can say goodbye to all these installation processes and just grab the Dockerfile to build, test, execute and even deploy. You even don't need to worry about scaling, as Docker does it all for you.&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting Started
&lt;/h2&gt;

&lt;p&gt;Let's begin by creating a Dockerfile. Here, we will be using Docker to run integration and smoke testing on your Flutter app.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;FROM ubuntu:20.10 as builder
RUN apt update &amp;amp;&amp;amp; apt install -y curl git unzip xz-utils zip libglu1-mesa openjdk-8-jdk wget
RUN useradd -ms /bin/bash user
USER user
WORKDIR /home/user

#Installing Android SDK
RUN mkdir -p Android/sdk
ENV ANDROID_SDK_ROOT /home/user/Android/sdk
RUN mkdir -p .android &amp;amp;&amp;amp; touch .android/repositories.cfg
RUN wget -O sdk-tools.zip https://dl.google.com/android/repository/sdk-tools-linux-4333796.zip
RUN unzip sdk-tools.zip &amp;amp;&amp;amp; rm sdk-tools.zip
RUN mv tools Android/sdk/tools
RUN cd Android/sdk/tools/bin &amp;amp;&amp;amp; yes | ./sdkmanager --licenses
RUN cd Android/sdk/tools/bin &amp;amp;&amp;amp; ./sdkmanager "build-tools;29.0.2" "patcher;v4" "platform-tools" "platforms;android-29" "sources;android-29"
ENV PATH "$PATH:/home/user/Android/sdk/platform-tools"

#Installing Flutter SDK
RUN git clone https://github.com/flutter/flutter.git
ENV PATH "$PATH:/home/user/flutter/bin"
RUN flutter channel dev
RUN flutter upgrade
RUN flutter doctor
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Run this Dockerfile in your system using the command &lt;code&gt;docker build -t flutterdockerfile .&lt;/code&gt;&lt;br&gt;
This will begin your Dockerfile and start installing all the required tools for the perfect Flutter Development. &lt;/p&gt;

&lt;p&gt;Now go ahead and push your Flutter app to your git repository and make sure you set up testing in your &lt;code&gt;widget_test.dart&lt;/code&gt; file.&lt;/p&gt;

&lt;p&gt;Once you are done pushing the Flutter app, add few more lines to the Dockerfile.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;RUN git clone GIT_REPO_URL
RUN cd FILE_NAME &amp;amp;&amp;amp; flutter test
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Replace GIT_REPO_URL with your Flutter git repo URL and FILE_NAME will be the name of your repo.&lt;br&gt;
This will now begin test on your Flutter application.&lt;/p&gt;
&lt;h2&gt;
  
  
  Alternative Method
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Pull the Docker image by running &lt;code&gt;docker pull ameysunu/flutterdocker&lt;/code&gt; in your terminal.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Now run &lt;code&gt;docker images&lt;/code&gt; and get the IMAGE ID for the container.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;With the obtained IMAGE ID, run &lt;code&gt;docker run -i -t IMAGE ID&lt;/code&gt;, and you will be in the container.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Clone the Flutter app from your git repository and run &lt;code&gt;flutter test&lt;/code&gt; for smoke testing&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I'm also linking this amazing post on DEV for Flutter Dockerization with Android Emulator as well.&lt;/p&gt;


&lt;div class="ltag__link"&gt;
  &lt;a href="/matsp" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&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%2Fuser%2Fprofile_image%2F131161%2F90a81cf1-418d-4f82-a280-5b906c25ed40.jpg" alt="matsp"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="https://dev.to/matsp/let-docker-flutter-for-you-3gc2" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Let docker flutter for you&lt;/h2&gt;
      &lt;h3&gt;Mats Pfeiffer ・ May 15 '20&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#flutter&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#android&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#docker&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#linux&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;



</description>
      <category>flutter</category>
      <category>docker</category>
    </item>
    <item>
      <title>Alleviate - DigitalOcean App Platform Hackathon</title>
      <dc:creator>Amey Sunu</dc:creator>
      <pubDate>Sat, 09 Jan 2021 12:43:54 +0000</pubDate>
      <link>https://dev.to/ameysunu/alleviate-digitalocean-app-platform-hackathon-eap</link>
      <guid>https://dev.to/ameysunu/alleviate-digitalocean-app-platform-hackathon-eap</guid>
      <description>&lt;h2&gt;
  
  
  What I built
&lt;/h2&gt;

&lt;p&gt;Alleviate is a personal journal/blogging app, inspired by &lt;a href="https://reflectly.app/" rel="noopener noreferrer"&gt;Reflectly&lt;/a&gt;. Users can add their daily life, as a blog that would stay just personally with you. This could be shared with a therapist if you'd like and this would definitely help users overcome any sort of phobia or stress that you might be facing, as it would more likely for therapists to help you if you write it down as a blog or a journal while it's still fresh in your mind.&lt;/p&gt;

&lt;h3&gt;
  
  
  Category Submission:
&lt;/h3&gt;

&lt;p&gt;Program for the People&lt;/p&gt;

&lt;h3&gt;
  
  
  App Link
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://dohack-aswsx.ondigitalocean.app/" rel="noopener noreferrer"&gt;https://dohack-aswsx.ondigitalocean.app/&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Screenshots
&lt;/h3&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%2Fi%2Ffibgtdzohne55qez63kx.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%2Fi%2Ffibgtdzohne55qez63kx.png" alt="Load Page" width="800" height="1688"&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%2Fi%2F6y7poo2x8zoh57ifavab.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%2Fi%2F6y7poo2x8zoh57ifavab.png" alt="Home Page" width="800" height="1688"&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%2Fi%2Fg29isrs9e6lgxnzyxdza.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%2Fi%2Fg29isrs9e6lgxnzyxdza.png" alt="Stats" width="800" height="1688"&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%2Fi%2Fb9q2e0jh7keygii1p829.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%2Fi%2Fb9q2e0jh7keygii1p829.png" alt="Blog Page" width="800" height="1688"&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%2Fi%2Fsnnohm7h1vbvplkdi19r.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%2Fi%2Fsnnohm7h1vbvplkdi19r.png" alt="Voice Note" width="800" height="1688"&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%2Fi%2Fs4ironqnvsoeowtsostv.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%2Fi%2Fs4ironqnvsoeowtsostv.png" alt="User" width="800" height="1688"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Description
&lt;/h3&gt;

&lt;p&gt;Alleviate is an Android app that will help users relax by allowing them to write down their daily happenings. The app also allows a voice notes feature, as it is proven that emotions are better expressed through the mouth, and if the user has a therapist, this would help the therapist understand better. As per a daily emotional basis, statistical data would be generated to determine the user's overall mood and behaviour on a weekly and monthly basis.&lt;/p&gt;

&lt;h4&gt;
  
  
  Features
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Users shall be greeted and displayed with a daily motivational quote. Though many people do not read such quotes, it is highly observed that it somehow does get in your head deep down, somewhere we all don't even realize and know.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Users can add their daily blogs, via text as well as also using their microphone. It is more likely observed that speaking your emotions out really helps in comparison to texting.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Users also have the provision to add their daily mood, and statistical data will be generated based on the user's mood per week.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The Android app is built and deployed on Digital Ocean's App Platform and can be downloaded from the above link attached or &lt;a href="https://dohack-aswsx.ondigitalocean.app/" rel="noopener noreferrer"&gt;here&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%2Fi%2Fk75tbxpeum8kwzn88372.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%2Fi%2Fk75tbxpeum8kwzn88372.PNG" alt="DO Caddy" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Link to Source 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/ameysunu" rel="noopener noreferrer"&gt;
        ameysunu
      &lt;/a&gt; / &lt;a href="https://github.com/ameysunu/dohack" rel="noopener noreferrer"&gt;
        dohack
      &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;Alleviate&lt;/h1&gt;

&lt;/div&gt;
&lt;p&gt;&lt;a href="https://cloud.digitalocean.com/apps/new?repo=https://github.com/ameysunu/dohack/tree/master" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/e093a0ed531124a715aad44362848ca2cff28c3182c2c0ca4a70b2564b681f59/68747470733a2f2f7777772e6465706c6f79746f646f2e636f6d2f646f2d62746e2d626c75652e737667" alt="Deploy to DO"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Personal Blogger.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Getting Started&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;Deploy the app to Digital Ocean and get the apk from the generated web server. If you are a open-source contributor, follow the below steps:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Clone the app, and run &lt;code&gt;flutter pub get&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;flutter test&lt;/code&gt; to execute the smoke test.&lt;/li&gt;
&lt;li&gt;Build the app and run on any device after the above tests.&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;pod install&lt;/code&gt; and install all the Firebase modules, which can be viewed on &lt;code&gt;pubspec.yaml&lt;/code&gt; needed for iOS devices.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A few resources to get you started if this is your first Flutter project:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://flutter.dev/docs/get-started/codelab" rel="nofollow noopener noreferrer"&gt;Lab: Write your first Flutter app&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://flutter.dev/docs/cookbook" rel="nofollow noopener noreferrer"&gt;Cookbook: Useful Flutter samples&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For help getting started with Flutter, view our
&lt;a href="https://flutter.dev/docs" rel="nofollow noopener noreferrer"&gt;online documentation&lt;/a&gt;, which offers tutorials,
samples, guidance on mobile development, and a full API reference.&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/ameysunu/dohack" 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;
  
  
  Permissive License
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/ameysunu/dohack/blob/master/LICENSE" rel="noopener noreferrer"&gt;MIT License&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Background
&lt;/h2&gt;

&lt;p&gt;The main inspiration for this app came from people's moods during the pandemic and the app &lt;a href="https://reflectly.app" rel="noopener noreferrer"&gt;Reflectly&lt;/a&gt;. Many people out there had so much they needed to express especially staying at home was really difficult for some of them. It's scientifically proven that when you speak out your feelings to someone, it definitely helps you a lot. So, I thought why not jot it down instead, just for your eyes. This would definitely help users a lot, and you can also view these blogs later to just remember that you had more terrible days before. &lt;/p&gt;

&lt;h3&gt;
  
  
  How I built it
&lt;/h3&gt;

&lt;p&gt;The app is built on Flutter for Android Devices and Firebase Firestore for database management. I have also integrated Google Cloud Speech to Text API for the voice note feature and Google Sign-In for a seamless user login. &lt;br&gt;
Initially, when I started on the project, I wasn't aware that the Digital Ocean App Platform never supported Flutter, and that devastated me. But through documentation, I figured out that the App Platform did support Docker and I could use Docker to build and deploy my apk with a web server. Hence, I prepared the Dockerfile and resources, but I had a challenge here, that was deploying the apk to a web server. I had experience with using Nginx but that wasn't turning out to be fruitful, so I decided to deploy it via Caddy, but I wasn't familiar at all with Caddy. Hence Caddy was something new that I learned.&lt;br&gt;
After everything was set up, App Platform did everything for me, right from building to deploying, and it's the best CI/CD, I have ever used and the documentation to support it all just tops everything.&lt;/p&gt;

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

&lt;p&gt;While deploying the app, it's highly recommended to take the 2 GB RAM | 1 vCPU and above configuration. The deploying can take from 15-18 minutes, hence do keep patience and also feel free to contribute to my repository.&lt;/p&gt;

</description>
      <category>dohackathon</category>
      <category>flutter</category>
      <category>docker</category>
      <category>showdev</category>
    </item>
    <item>
      <title>Alleviate, Daily Blog and Relaxation app- Part 3</title>
      <dc:creator>Amey Sunu</dc:creator>
      <pubDate>Sun, 03 Jan 2021 21:19:40 +0000</pubDate>
      <link>https://dev.to/ameysunu/alleviate-daily-blog-and-relaxation-app-part-3-44kk</link>
      <guid>https://dev.to/ameysunu/alleviate-daily-blog-and-relaxation-app-part-3-44kk</guid>
      <description>&lt;p&gt;Whew, didn't take me quite long since the previous but I'm almost done with the app. Since there were very minimal bugs left for me to resolve, I had the biggest challenge to face, which was Deploying the app on the Digital Ocean App Platform. Prior to this hack, I didn't know that App Platform never supported Flutter Apps, and now that I was ready to deploy and play with App Platform, this fact hit me hard. &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%2Fuxk7pj4p1zs7s76h3d6t.gif" 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%2Fuxk7pj4p1zs7s76h3d6t.gif" alt="Depression" width="480" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;But, I never gave up, I saw Docker as a supported framework and thought of using Docker to build and deploy my app using Nginx so that the built app can be downloaded and installed manually on mobile phones.&lt;/p&gt;

&lt;p&gt;It took me some time to understand and figure out how Digital Ocean's App Platform works, but documentation and the lovely community helped me figure out each and every part of it. &lt;/p&gt;

&lt;p&gt;Once, I was familiar with the platform and the tools, I started working on the Dockerfile and decided to move from Nginx to Caddy for serving my apk. However, one challenge I faced here was with the &lt;code&gt;OutOfMemory&lt;/code&gt; error which usually happens, when your RAM isn't enough. However, users can increase their RAM and CPU configuration without having to run and build the docker image again. Once, this was done, Voila! The apk was served fresh on a server host, where anyone could download and use it.&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%2Fi%2Fyxngwde010sl3a5u9qc5.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%2Fi%2Fyxngwde010sl3a5u9qc5.PNG" alt="Alt Text" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  I'd recommend using the 2 GB RAM | 1 vCPU configuration and above for running the Dockerfile.
&lt;/h4&gt;

&lt;h4&gt;
  
  
  I just have few more bug fixes to deal with and my app would be fully done and dusted in a couple of days.
&lt;/h4&gt;

</description>
      <category>dohackathon</category>
      <category>flutter</category>
      <category>docker</category>
    </item>
    <item>
      <title>Alleviate, Daily Blog and Relaxation app- Part 2</title>
      <dc:creator>Amey Sunu</dc:creator>
      <pubDate>Fri, 01 Jan 2021 08:17:37 +0000</pubDate>
      <link>https://dev.to/ameysunu/alleviate-daily-blog-and-relaxation-app-part-2-40he</link>
      <guid>https://dev.to/ameysunu/alleviate-daily-blog-and-relaxation-app-part-2-40he</guid>
      <description>&lt;p&gt;From the previous week's workflow, there are massive changes done to the UI and working of the app. New technologies and frameworks have been added to the app, namely:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Cloud Firestore&lt;/li&gt;
&lt;li&gt;Google Authentication&lt;/li&gt;
&lt;li&gt;Google Speech to Text API&lt;/li&gt;
&lt;li&gt;Sound Stream&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Cloud Firestore
&lt;/h2&gt;

&lt;p&gt;Cloud Firestore is used to store all user details, right from blog to voice notes, and for faster retrieval and display of data, if the user needs any.&lt;/p&gt;

&lt;h2&gt;
  
  
  Google Authentication
&lt;/h2&gt;

&lt;p&gt;This will be used to create Sign-in with Google feature, for seamless logging in without hassle. One-tap formula to get away right into the app has always proved to be really powerful, especially when it comes to creating an account and then signing in, which definitely isn't really a great thing for the user to do.&lt;/p&gt;

&lt;h2&gt;
  
  
  Google Speech to Text API
&lt;/h2&gt;

&lt;p&gt;One of the best Speech to Text API, in my opinion. This will be used to convert voice notes into text on the app, and with the power of GCP, the API is also capable of taking input from more than 20 languages.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pages
&lt;/h2&gt;

&lt;h4&gt;
  
  
  Home Page
&lt;/h4&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%2Fi%2Fkijvg46gmyizc4my92n3.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%2Fi%2Fkijvg46gmyizc4my92n3.png" alt="Alt Text" width="800" height="1688"&gt;&lt;/a&gt;&lt;br&gt;
The Home Page displays "Daily Moods" along with a motivational quote.&lt;/p&gt;

&lt;h4&gt;
  
  
  Weekly Analysis
&lt;/h4&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%2Fi%2Fixj0aozxirolhv5p8ay6.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%2Fi%2Fixj0aozxirolhv5p8ay6.png" alt="Alt Text" width="800" height="1688"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Analysis of data based on user mood is displayed for better orientation and understanding&lt;/p&gt;

&lt;h4&gt;
  
  
  Voice Blogs
&lt;/h4&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%2Fi%2Fyqqt6s2sqtpidv5usvfr.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%2Fi%2Fyqqt6s2sqtpidv5usvfr.png" alt="Alt Text" width="800" height="1688"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Using live speech to text converter to get values as a text instead of having to type it all. Speaking out feelings is considered more effective than writing it.&lt;/p&gt;

&lt;h4&gt;
  
  
  Blogging
&lt;/h4&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%2Fi%2Fxr9h2nkrczsc6kwqv16x.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%2Fi%2Fxr9h2nkrczsc6kwqv16x.png" alt="Alt Text" width="800" height="1688"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The usual blogging mechanism.&lt;/p&gt;

&lt;h4&gt;
  
  
  I really hope to complete the app by next week and then completely focus on deploying it to Digital Ocean.
&lt;/h4&gt;

</description>
      <category>dohackathon</category>
      <category>flutter</category>
      <category>docker</category>
    </item>
    <item>
      <title>Alleviate, Daily Blog and Relaxation app</title>
      <dc:creator>Amey Sunu</dc:creator>
      <pubDate>Mon, 28 Dec 2020 08:02:30 +0000</pubDate>
      <link>https://dev.to/ameysunu/alleviate-daily-blog-and-relaxation-app-5h44</link>
      <guid>https://dev.to/ameysunu/alleviate-daily-blog-and-relaxation-app-5h44</guid>
      <description>&lt;p&gt;As human beings, we tend to vent out on the smallest of issues and even have a lot of mood swings. Hence, I decided to make Alleviate, a daily journal/blog app that would stay personally with you. Users can add their daily life, as a blog that would stay just personally with you. This could be shared with a therapist if you'd like and this would definitely help users overcome any sort of phobia or stress that you might be facing, as it would more likely for therapists to help you if you write it down as a blog or a journal while it's still fresh in your mind.&lt;/p&gt;

&lt;h4&gt;
  
  
  Features:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Users shall be greeted and displayed with a daily motivational quote. Though many people do not read such quotes, it is highly observed that it somehow does get in your head deep down, somewhere we all don't even realize and know.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Users can set reminders if they like within the app, and they would be reminded 15 minutes prior to the actual time so that users are somewhat prepared mentally.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Users can add their daily blogs, via text as well as also using their microphone. It is more likely observed that speaking your emotions out really helps in comparison to texting.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Users also have the provision to add their daily mood, and statistical data will be generated based on the user's mood per week.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Technologies:
&lt;/h4&gt;

&lt;p&gt;The entire app will be developed on Flutter and Firebase for Google Sign-in and Cloud Firestore. For the voice recorder feature, Google Speech to Text API will be used, for faster and efficient conversion of speech into text.&lt;/p&gt;

&lt;h2&gt;
  
  
  First Week
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;The initial boilerplate code was recognized and analyzed along with the needs of API, tools, and the code.&lt;/li&gt;
&lt;li&gt;The login screen was ditched and replaced with a Sign-in Google feature for better user experience and better security.&lt;/li&gt;
&lt;li&gt;The blog part, along with the home screen and Speech to Text API was somewhat a tougher process, but however completed it within a week's time.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Stay tuned for next week's progress.
&lt;/h4&gt;

</description>
      <category>dohackathon</category>
      <category>flutter</category>
      <category>docker</category>
    </item>
  </channel>
</rss>
