·조회수 48

Development process and review of the Denver server time project

Project Introduction

This project is a service that provides the most accurate time of the server. Popular tickets and course registrations usually close within a few seconds of opening. So you have to apply quickly as soon as the time comes. However, the problem is that the time of all servers is subtly different. Some places are 2 seconds faster, and some are 1 second slower. There are many cases where the difference is even greater. Checking the server time in advance and registering for courses is now essential.

Reason for Starting

I realized what to do for a project. A product by a solo developer should be different from that of a resource-rich company. Solo developers have limited funds and resources for development. So, even if you have to sacrifice some marketability, you need to create a product that uses fewer resources. That way, you can sustain it.

Websites that are widely used for server time queries for course registrations or ticketing have almost no burden on the backend. If you deploy through Verecl, you can make a small profit through advertising even when you sleep. Creating a website that continues to run without any special problems once it is made was a good topic for me as a solo developer.

Production Process

  1. Since this was my first project, I made a plan in advance before starting.
    • Target: People aged 10 to 30 who book performances or register for courses.
    • Development period: I set it to 2 weeks.
    • In the first week, I created an MVP version that only works with core functions, and in the second week, I added chat and filled in the missing parts as below. The reason for dividing it into steps rather than completing it at once is that deploying the MVP version in advance and improving it is the most efficient way for me.

  1. The reason for setting a longer schedule than the scale of the project is that I plan to deploy several small projects of this size in the future. Rather than building from scratch every time, I aimed to create templates and necessary libraries in advance so that they can be used in the next project.

    • I created a Next.js template. (I set up i18n, svgr, react-query, tailwindcss, etc. in advance.)
    • I created a design system prototype. I created frequently used components such as buttons and inputs in advance and deployed them to Github packages so that they can be used.
  2. I connected it to a subdomain without purchasing a domain. I couldn't afford to pay for a domain every month for a project where it is uncertain whether advertising revenue will come in. (I used https://servertime.danver.io.)

  3. I used Route53 to Warm-up the Vercel serverless cold start issue.

  4. It is convenient to divide the work into detailed tasks, so I made cards in advance. I marked each card as completed and put it in a box, checking how many tasks I completed each day.

  5. I placed a Google Home in front of my desk and worked for 25 minutes and took a 5-minute break repeatedly. Working for a long time in the same position puts a strain on the body. By stretching a little frequently, I can concentrate for a long time without any problems, so I use Google Home. I tried using the Pomodoro timer and various methods, but this is the most convenient. When I start working, I say, "Hey Google, set a 25-minute timer," and it tells me exactly 25 minutes later, making it easy to manage my time.

  6. I managed the translated text in a Google spreadsheet. It is easy to see at a glance and convenient when requesting translations from friends in the future. I write in a spreadsheet, download it through commands, and convert it to fit i18n.

  1. I am using the design system deployed through Github Packages. Unlike NPM, Github Packages allows you to use private packages for free up to a certain extent.

  1. I deployed the web through Vercel, and due to the serverless nature, if it stops being used for a few minutes, a Cold start occurs. I utilized Route 53 Health Check to send requests every 30 seconds to always connect quickly. I referred to the blog post below for this part.

https://medium.com/aws-tip/speeding-up-aws-amplify-nextjs-first-render-cold-start-and-images-an-unexpected-result-36a416d69615

Technologies Used

  • Web: Next.js, Typescript, TailwindCSS
  • Localization: next-i18next (translation), Managing translation texts using Google sheet
  • Chat: Firebase Realtime Database
  • Sound playback: use-sound library (https://github.com/joshwcomeau/use-sound)
  • Deployment: Automatic deployment through Vercel
  • Backend: Next.js API route Backend

Good Things

  1. Deploying and using a library for the first time through Github Packages
  2. Applying automatic deployment to both frontend and backend so that I can focus only on the code. (It can help alleviate the resource shortage problem of solo development)
  3. Creating a chat service easily and for free using Firebase Realtime Database (Up to 360MB of downloads per day are free)
  4. Deciding on the direction of the technologies I will use in the future. Surprisingly, new and better technologies are not necessary for earning money. Business is more important than technology. I chose to create one more project during the time I learn and solve trial and error. After quitting my job, I have 6 months to achieve results.

Failures Encountered During Progress

1. Inaccurate Time Estimation

The core of this service is to determine the exact time of the server, but there are limitations. There is always a delay on the web, and the time varies each time depending on the network situation. There are also issues with sending signals from the Vercel server to the ticketing site due to CORS problems. Until I find a better way, I decided to continue using the current method.

2. Deploying Next.js with Amplify

If you put ads on Vercel, you need to purchase a paid plan ($20 per month). I attempted to deploy through AWS Amplify, which does not have this problem, but I had difficulty with locale detection and gave up. I tried with middleware, but it was not smooth. Since there is a set schedule, I plan to try again if it is resolved later.

3. AdSense Approval Failure

I failed due to lack of content. I need to add more content. I will change this to get approval through a blog. If I get approval for the root URL, I can use subdomains without approval, so I will insert ads from the beginning in future projects.

## Closing

Although it is a simple site, I am satisfied with creating the result as planned. I am proud of creating various foundations to quickly create the next project. My thoughts will change a little from now on. Now, if the MVP version of a new service is small in scale, I can create and deploy it in a day, so I think I can try it immediately if an idea comes to mind while walking to work.

List of Things I Want to Complete Someday

  1. Establish an environment where users can help with language translation. Adding one language increases the chances of exposure to as many people who use that language. I want to think about ways to get help with language translation that can be used for any service I create in the future.
김지식
김지식
웹, 앱 개발자입니다.

댓글

댓글을 불러오는 중...