<?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: Adam Wojkowski</title>
    <description>The latest articles on DEV Community by Adam Wojkowski (@woji).</description>
    <link>https://dev.to/woji</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%2F836688%2Fbb3d4c95-ad22-40fc-aae3-d0716292c07e.jpg</url>
      <title>DEV Community: Adam Wojkowski</title>
      <link>https://dev.to/woji</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/woji"/>
    <language>en</language>
    <item>
      <title>how to make simple scrum roadmap with WEKAN</title>
      <dc:creator>Adam Wojkowski</dc:creator>
      <pubDate>Sat, 13 Aug 2022 13:59:00 +0000</pubDate>
      <link>https://dev.to/woji/how-to-make-simple-scrum-roadmap-with-wekan-4jcm</link>
      <guid>https://dev.to/woji/how-to-make-simple-scrum-roadmap-with-wekan-4jcm</guid>
      <description>&lt;p&gt;In this post, I would like to share, how did we resolve one of my SCRUM pain's - make nice and easy to work with, ROADMAP.&lt;br&gt;
First when we started practice SCRUM in our team we spent some time time with search for useful onpremise tool. We are hospital, ok... quite large hospital, 8.5k employees, in 7 cities, highly secured environment, no cloud services, very large intranet (30k devices), though job to keep up with world outside :)&lt;/p&gt;

&lt;p&gt;Fortunately there is &lt;a href="https://wekan.github.io/"&gt;WEKAN&lt;/a&gt;. I'll write some article how do we run it later, for now, lets have running WEKAN onpremise with SSO.&lt;/p&gt;

&lt;p&gt;Back to roadmap. There is no easy guide/single template for SCRUM roadmap. try goog for it,... U'll get tenths of very different templates,... well ... this is nice at the end, nobody forces us to make it exactly specific way :)&lt;/p&gt;

&lt;p&gt;We run the WEKAN for 1/2 a year in team (before get bored with the roadmap), so we all had some time to get familiar with this tool.&lt;br&gt;
And it was me, who decided to use WEKAN for roadmap because we already know it and there will be no extra effort/cost.&lt;/p&gt;

&lt;p&gt;We run 14 days sprints. That splits the year into 26 cycles in 4 quarters, lets see how we modeled it in WEKAN.&lt;/p&gt;

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

&lt;p&gt;All I did is, that I made 4 swimmlanes (Q1 - spring, Q2 - summer, Q3 - autumn, Q4 - winter) and I placed 7 columns into it, just numbered 1,3,5,... after first week of sprint.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;BTW does anybody have better idea how to name them ?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Then I placed exactly one card into each column in each swimmlane.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Tip: don't forget to remove unwanted fields from cards such as CreatedBy, BeginsAt, blah blah, here nobody needs them :)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Halelujah, I got it I though,... I started to make card tags (very simple) but,...man it is useless, tags can't be grouped, ordered, arranged, so ... game over with Wekan???&lt;/p&gt;

&lt;p&gt;When I was under deepest depression, I showed my problem to my teammate and he (is anyway a million dollar man) responded within just 4 hours with very, but really very nice solution :O, what a shame on me :)&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Thank you again Honza !!!!!&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The secret is string template custom field.&lt;/strong&gt; It is a bit hidden in Wekan, so lets look closer where U can find it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--q_aNc74E--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/nch2rt4z334a3pn5ro21.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--q_aNc74E--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/nch2rt4z334a3pn5ro21.png" alt="tablo custom fields" width="509" height="638"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;now look what he did :O, he just put this as a field format:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;p class="card-label card-label-silver"&amp;gt;%{value}&amp;lt;/p&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and thats it.&lt;/p&gt;

&lt;p&gt;We use Wekan Tag styles and colors, ... one can easily find them all with browser page inspector, eg.&lt;br&gt;
card-label-silver&lt;br&gt;
card-label-peachpuff&lt;br&gt;
card-label-yellow&lt;br&gt;
card-label-lime&lt;br&gt;
card-label-purple&lt;br&gt;
...&lt;/p&gt;

&lt;p&gt;Then whenewer we wants to show to manager what we are going to work on sprint, just open sprint card, add the custom field on it.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--tr3VRv8J--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/veb9o510h3msqqc9iepf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--tr3VRv8J--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/veb9o510h3msqqc9iepf.png" alt="add custom field on card" width="718" height="348"&gt;&lt;/a&gt;&lt;br&gt;
then fill some texts row by row like this&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ZR8M8al9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hn5ls1u0pllfjlmaqden.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ZR8M8al9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hn5ls1u0pllfjlmaqden.png" alt="filling custom field values" width="519" height="357"&gt;&lt;/a&gt;&lt;br&gt;
and thats all.&lt;br&gt;
We showed it to our general manager and he was thrilling/jumping/screaming YES, etc,... anyway I know, he would never look at it :), but... we can now make profi workplan for whole year.&lt;/p&gt;

&lt;p&gt;tadaaa, here is our first roadmap&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--V-XLLFbw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/99bp0q90qk3zhvuewxlc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--V-XLLFbw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/99bp0q90qk3zhvuewxlc.png" alt="our roadmap" width="880" height="439"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;we finished the roadmap just few weeks ago, so there is nothing at the begin of year in plan, ... and yes we were all at work, busy on projects :)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;As I wrote, we are very happy with fact, that we don't need another tool.&lt;/p&gt;

&lt;p&gt;Please let me know what do you think about our setup and if anybody will interest, I might share how do we work with product backlogs and sprints in Wekan next time.&lt;/p&gt;

&lt;p&gt;thank you for reading and many thanks to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.xet7.org/"&gt;xet7&lt;/a&gt; for making Wekan&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.linkedin.com/in/jan-%C4%8Derm%C3%A1k-755161242/cs?trk=p_mwlite_wvmp_wvmp-list"&gt;Jan Cermak&lt;/a&gt; for p class="card-label card-label-silver" %{value} p&lt;/li&gt;
&lt;li&gt;and &lt;a href="https://www.kzcr.eu/"&gt;Krajska Zdravotni a.s.&lt;/a&gt; for patience&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Adam&lt;/p&gt;

</description>
    </item>
    <item>
      <title>FOSS project-time-tracker</title>
      <dc:creator>Adam Wojkowski</dc:creator>
      <pubDate>Fri, 25 Mar 2022 16:49:57 +0000</pubDate>
      <link>https://dev.to/woji/foss-project-time-tracker-2kjg</link>
      <guid>https://dev.to/woji/foss-project-time-tracker-2kjg</guid>
      <description>&lt;p&gt;some 4 months ago I started to search for flexible time tracker app for small team of (rather very large hospital) developers. While it might sound strange, it is quite tough ... when you need this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;pure onpremise (cybersecurity officer requirement)&lt;/li&gt;
&lt;li&gt;react based easy customizable and integrate&lt;/li&gt;
&lt;li&gt;node backend&lt;/li&gt;
&lt;li&gt;usefull &amp;amp; customizable reporting functions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;err("not found") says google&lt;/p&gt;

&lt;p&gt;although,... there was one &lt;br&gt;
&lt;a href="https://github.com/shijuvar/React-TimeTracker.git"&gt;https://github.com/shijuvar/React-TimeTracker.git&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;does exactly what I wanted... except...&lt;/p&gt;

&lt;p&gt;In February 2022 was finally some spare time to dive into team time tracking... ehm... with surprise... React-TimeTracker is totaly unmaintained/un-upgradeable:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;react 1.0&lt;/li&gt;
&lt;li&gt;not so good for containerization LAMP backend (w/ just single handler)&lt;/li&gt;
&lt;li&gt;obscure UX lib, unsupported for years&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;so sad, it was my favorite one :(&lt;/p&gt;

&lt;h2&gt;
  
  
  prepare stage
&lt;/h2&gt;

&lt;p&gt;spent next 3 days by evaluating possibilities of DYI time tracker ... liked so much simple shijuvar's React-TimeTracker data structure. I tried to make prototype and estimate time cost to write my own tracker... decided to go w/ 1 month budget.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;at very begin I was so optimistic and thought of use my loved &lt;a href="https://gitlab.com/woji/mano.git"&gt;MANO&lt;/a&gt;, but MANO is in very early stage, and finally... sqlite3 is good enough for this, so I gave up on this, despite it would be much more fun with it :)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Also I thought that I can use React-TimeTracker screen layouts, but no way, even UX moves forward miiiles ;), but at least one component that I don't have to think about much...database structure.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;this time I decided to not create visual prototype using presentation tool as I felt this app is piece of cake, haha, how silly :)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  development
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;There will be no code in this article, as everything I wrote about is publicly available at: &lt;a href="https://gitlab.com/woji/prott.git"&gt;https://gitlab.com/woji/prott.git&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  database
&lt;/h3&gt;

&lt;p&gt;My only changes to React-TimeTracker db were:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;uppercased all tables and columns&lt;/li&gt;
&lt;li&gt;changed table PK from int autonumber to natural text codes, it is much easier to read data in db then.&lt;/li&gt;
&lt;li&gt;added DATA column to all tables to store raw json data as text. Doing RDBMS for 20 years though me, to don't create column for every stupid attribute I believe I need :)&lt;/li&gt;
&lt;li&gt;provided user &amp;amp; task with bit-value role ,eg. 0,1,2,4,8,16, so I don't have to mess with user -&amp;gt; task assignment. I just assign project &amp;amp; roles -&amp;gt; user and roles -&amp;gt; task. It simplifies all.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  containerization
&lt;/h3&gt;

&lt;p&gt;As being quite lazy &amp;amp; picky, I always try not to trash my computer with node, react, git etc. I work directly in container only (installed in VirtualBox).&lt;br&gt;
The only component installed in macbook is Atom editor &amp;amp; its ssh remote editor plugin &amp;amp; VirtualBox :). So first of all docker-compose.yml was created and, see how do I install npm packages in it :)&lt;/p&gt;

&lt;p&gt;This was my first app in react.js with hooks. Previously I wrote whole corporate internal eshop using react class components (w/ ASP.NET &amp;amp; MSSQL as backend) ,but this time I wanted to be puristic, all FOSS, all new :)&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Also I decided to go for all fresh MUI 5, react 17, react router 6... goodbye all my past hardly taken know-how. But it wasn't that big nightmare as I though.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;First component I messed with was react-router. New version supports property transfer to routed component and with hooks,...not bad, it was easy to setup route map for app, see ui/src/App.js.&lt;/p&gt;

&lt;p&gt;Next was Console UI. It is something I like, tiles with hover effects, icons, texts, almost no programming and no backend needed :)&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--PipTDWRd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://gitlab.com/woji/PROTT/-/raw/main/screenshoots/prott-console.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--PipTDWRd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://gitlab.com/woji/PROTT/-/raw/main/screenshoots/prott-console.png" alt="console" width="880" height="858"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Actually backend,... with very minor changes to data structure I decided to go for nodejs and sqlite3. I used sqlite3 in past for corporate Android app sync and... except unsupported outer right join, I can do all I need (I use CTE often).&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;so first true app component was Clients section (see ui/src/layout/Client).&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--IT99r55O--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://gitlab.com/woji/PROTT/-/raw/main/screenshoots/prott-client-list.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--IT99r55O--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://gitlab.com/woji/PROTT/-/raw/main/screenshoots/prott-client-list.png" alt="add client" width="880" height="898"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Client list display ClientCard and allows Add/Edit Client data using EditClientDlg.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--qWeeE4Qx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://gitlab.com/woji/PROTT/-/raw/main/screenshoots/prott-add-client.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--qWeeE4Qx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://gitlab.com/woji/PROTT/-/raw/main/screenshoots/prott-add-client.png" alt="add client" width="880" height="894"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;actually this is 4th iteration of these components and still I'am unhappy about, but it works.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Also first component that required backend. Quickly wrote /svc/ctrlClients.js (and required server.js and routes.js) ...bam...&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;node-sqlite3 is fully async (w/out promise support), very annoying, so worked with nesting to nesting and nesting...&lt;br&gt;
After 20 days of development I finally found some useful solution to avoid async hell (see /svc/aa-sqlite.js), unfortunately 80% of backend was already written...this will be tough to refractor :(&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;another challenge was MUI 5. Compare to previous version, all is up side down, but changes makes sense so I manually took previously made components and refactored them into new shape. Inline styles are now pretty straightforward and easy, so I don't mess with some withStyle useStyle, etc.&lt;/p&gt;

&lt;p&gt;Next component was surprisingly Timesheet&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--loWcj-3O--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://gitlab.com/woji/PROTT/-/raw/main/screenshoots/prott-fill-timesheet.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--loWcj-3O--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://gitlab.com/woji/PROTT/-/raw/main/screenshoots/prott-fill-timesheet.png" alt="fill week timesheet" width="880" height="863"&gt;&lt;/a&gt;&lt;br&gt;
I was very curious how difficult is to write such a complex (to my skill) UI.&lt;br&gt;
First I needed to add some functionality to JS Date so I made client version of DatePlus and created functions to compute week, week start&amp;amp;end dates... and yes, all is fully internationalized... there is also server version for nodejs, more consolidated. Unfortunately I don't know the way how to share DatePlus code between react and express :(&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;actually, did U know that week starts on 4 different days on this planet ????? damn...&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I wanted to make timesheet annoyance as much fun &amp;amp; comfortable to use for my guys&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--hzrk6Rss--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://gitlab.com/woji/PROTT/-/raw/main/screenshoots/prott-timesheet-change-mdh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--hzrk6Rss--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://gitlab.com/woji/PROTT/-/raw/main/screenshoots/prott-timesheet-change-mdh.png" alt="fill week timesheet" width="880" height="818"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;so tap day &amp;amp; tap amount of man hours... satisfied me :)&lt;/p&gt;

&lt;p&gt;Then I implemented step by step Projects&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--6iIBTkOy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://gitlab.com/woji/PROTT/-/raw/main/screenshoots/prott-project-list.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--6iIBTkOy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://gitlab.com/woji/PROTT/-/raw/main/screenshoots/prott-project-list.png" alt="logo" width="880" height="896"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Tasks&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--OvT9Eaxd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://gitlab.com/woji/PROTT/-/raw/main/screenshoots/prott-task-list.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--OvT9Eaxd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://gitlab.com/woji/PROTT/-/raw/main/screenshoots/prott-task-list.png" alt="logo" width="880" height="891"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Users&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--PIyOVuXD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://gitlab.com/woji/PROTT/-/raw/main/screenshoots/prott-add-user.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--PIyOVuXD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://gitlab.com/woji/PROTT/-/raw/main/screenshoots/prott-add-user.png" alt="add employee" width="880" height="996"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;All similar to Clients with just different backend calls and form fields.&lt;/p&gt;

&lt;p&gt;and also UserReport&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--NB9wekEw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://gitlab.com/woji/PROTT/-/raw/main/screenshoots/prott-users-report.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--NB9wekEw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://gitlab.com/woji/PROTT/-/raw/main/screenshoots/prott-users-report.png" alt="user activity report" width="880" height="986"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;note that user report shows 3 colors (blue all time, green paid time, orange non-paid.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;ProjectReport&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--khRz8sjk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://gitlab.com/woji/PROTT/-/raw/main/screenshoots/prott-project-report.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--khRz8sjk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://gitlab.com/woji/PROTT/-/raw/main/screenshoots/prott-project-report.png" alt="user activity report" width="880" height="945"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;With react it is like write a book not like oldschool C#, ASP, etc.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;actually, it is very challenging for me still to start new class or functional component. Any idea how to make it faster ?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  conclusion
&lt;/h2&gt;

&lt;p&gt;until now 2022-03-25 this project took's me almost exactly one month nearly full-time (for some reason... I have this time now).&lt;/p&gt;

&lt;p&gt;What I have now is quite satisfying to my needs. I still need to finalize delete functionality to UI, add indexes to db add some charts,... but the core work is done.&lt;/p&gt;

&lt;p&gt;So my team toolchain is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;fossil-scm - to manage sources and bugtracking&lt;/li&gt;
&lt;li&gt;Wekan - to do agile team coop and minimize multitasking&lt;/li&gt;
&lt;li&gt;PROTT - to track time that team spent on projects &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I would like to send my big thanks to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;apple for making macbook&lt;/li&gt;
&lt;li&gt;atom.io for great code editor&lt;/li&gt;
&lt;li&gt;google for V8 and facebook for react&lt;/li&gt;
&lt;li&gt;MUI for nice UX&lt;/li&gt;
&lt;li&gt;Richard Hipp's team for sqlite3 and inspiration&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;and, please send me some feedback if you like my work :)&lt;/p&gt;

&lt;p&gt;AW&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
