# Welcome!

This is a wiki for all information related to TechUp. If you require more information, please email sn-innovation-transformation\@gmail.com.


# Self-Directed Learning Roadmap

Start here if you want to learn parts of TechUp in your own time, at your own pace.

For those of us who may not have the time to undergo the full month-long TechUp, here are some curated, readily-available resources that the TechUp team recommends that you can get started with immediately.&#x20;

The objectives of this learning roadmap are to:&#x20;

{% hint style="success" %}
[**Understand how the Internet works**](#week-1-2-hours-how-does-the-internet-work)

* **Internet Infrastructure**: Learn about the physical and virtual components that make up the internet, including servers, data centers, and undersea cables.
* **IP Addresses and DNS**: Understand how devices are identified on the internet and how domain names are translated into IP addresses through the Domain Name System (DNS).
* **Data Transmission**: Study how data is broken into packets, how these packets travel through different routes to reach their destination, and how protocols like TCP/IP ensure reliable communication.
* **Web Protocols**: Explore protocols such as HTTP/HTTPS, which enable the transfer of web pages from servers to browsers.
* **Network Security**: Learn about encryption, secure sockets layer (SSL), transport layer security (TLS), and other methods used to protect data during transmission.
* **Cybersecurity**: Understand common internet threats like malware, phishing, and DDoS attacks, and learn basic strategies to mitigate these risks.
  {% endhint %}

{% hint style="success" %}
[**Understand product thinking**](#week-2-product). Key concepts:&#x20;

* **User-Centered Design**: Emphasize the importance of understanding user needs, preferences, and behaviors in product development
* **Product Vision and Strategy**: Understand how to create a compelling product vision and align it with business goals and strategies.
* **Feature Prioritization**: How to decide which features to develop first.
* **Prototyping and Testing**: Understand how to create prototypes and conduct user testing to gather feedback and iterate on product design.
* **Metrics and Analytics**: Understand key performance indicators (KPIs) and metrics to measure product success and inform decision-making.
* **Agile and Lean Methodologies**: Learn about agile development practices and lean startup principles to create flexible, efficient product development processes.
  {% endhint %}

{% hint style="success" %}
[**Understand web development basics**](#weeks-3-6-20-hours-selected-modules-of-the-complete-2024-web-development-bootcamp-on-udemy)**.** Key concepts:&#x20;

* **HTML and CSS**: Learn the fundamental building blocks of web pages, including how to structure content with HTML and style it with CSS.
* **JavaScript**: Gain basic proficiency in JavaScript to add interactivity to web pages, manipulate the DOM, and handle events.
* **Responsive Design**: Understand how to create web pages that look and function well on a variety of devices and screen sizes.
* **Front-End Frameworks**: Get an introduction to popular front-end frameworks like React and Vue.js that facilitate building dynamic user interfaces.
* **Back-End Development**: Learn the basics of server-side programming with languages like Node.js, Python, or Ruby, and understand how to create APIs.
* **Databases**: Understand how to interact with databases using SQL or NoSQL to store and retrieve data.
* **Version Control**: Learn the basics of version control systems like Git to manage code changes and collaborate with other developers.
* **Deployment**: Get an introduction to deploying web applications to the cloud using services like AWS, Heroku, or Netlify.
  {% endhint %}

***

## Week 1 (2 hours): How does the Internet Work?&#x20;

### a. How Computers Work

This playlist is an educational series of short videos that explain the fundamental concepts of computer science in an accessible and engaging way for beginners. Key topics include:&#x20;

* [**What Makes a Computer, a Computer?**](https://www.youtube.com/watch?v=mCq8-xTH7jA\&list=PLzdnOPI1iJNcsRwJhvksEo1tJqjIqWbN-\&index=2): Explains the basic components and functions of a computer.
* [**Binary & Data**](https://www.youtube.com/watch?v=USCBCmwMCDA\&list=PLzdnOPI1iJNcsRwJhvksEo1tJqjIqWbN-\&index=3): Introduces binary code and how computers use it to process data.
* [**Circuits & Logic**](https://www.youtube.com/watch?v=ZoqMiFKspAA\&list=PLzdnOPI1iJNcsRwJhvksEo1tJqjIqWbN-\&index=4): Discusses how electrical circuits and logic gates form the foundation of computer operations.
* [**CPU, Memory, Input & Output**](https://www.youtube.com/watch?v=DKGZlaPlVLY\&list=PLzdnOPI1iJNcsRwJhvksEo1tJqjIqWbN-\&index=5): Describes the role of the central processing unit, memory, and how computers interact with the outside world through input and output devices.
* [**Hardware and Software**](https://www.youtube.com/watch?v=xnyFYiK2rSY\&list=PLzdnOPI1iJNcsRwJhvksEo1tJqjIqWbN-\&index=6): Covers how software is used to control hardware and perform tasks.

{% embed url="<https://www.youtube.com/watch?list=PLzdnOPI1iJNcsRwJhvksEo1tJqjIqWbN-&v=OAx_6-wdslM>" %}

### b. How the Internet Works  &#x20;

This playlist is a series of educational videos that explain the fundamental concepts and mechanics behind the internet. Key topics include:

* [**What is the Internet?**](https://www.youtube.com/watch?v=Dxcc6ycZ73M\&list=PLzdnOPI1iJNfMRZm5DDxco3UdsFegvuB7): An introduction to the internet, its structure, and how it connects millions of devices worldwide.
* [**IP Addresses and DNS**](https://www.youtube.com/watch?v=5o8CwafCxnU\&list=PLzdnOPI1iJNfMRZm5DDxco3UdsFegvuB7\&index=3): Explains how IP addresses and the Domain Name System (DNS) help devices find and communicate with each other.
* [**Packets, Routing, and Reliability**](https://www.youtube.com/watch?v=AYdF7b3nMto\&list=PLzdnOPI1iJNfMRZm5DDxco3UdsFegvuB7\&index=4): Discusses how data is broken into packets, how they are routed across the network, and methods to ensure reliable data transfer.
* [**HTTP and HTML**](https://www.youtube.com/watch?v=kBXQZMmiA4s\&list=PLzdnOPI1iJNfMRZm5DDxco3UdsFegvuB7\&index=5): Covers how the Hypertext Transfer Protocol (HTTP) and Hypertext Markup Language (HTML) are used to deliver and display web pages.
* [**Encryption and Public Keys**](https://www.youtube.com/watch?v=ZghMPWGXexs\&list=PLzdnOPI1iJNfMRZm5DDxco3UdsFegvuB7\&index=6): Introduces encryption methods and public key infrastructure to secure data transmission.
* [**Cybersecurity and Crime**](https://www.youtube.com/watch?v=AuYNXgO_f3Y\&list=PLzdnOPI1iJNfMRZm5DDxco3UdsFegvuB7\&index=7): Examines potential threats on the internet and strategies to protect against them.

{% embed url="<https://www.youtube.com/watch?index=1&list=PLzdnOPI1iJNfMRZm5DDxco3UdsFegvuB7&v=Dxcc6ycZ73M>" %}

### c. What happens when you type a URL in the browser and press 'Enter'?

This Medium article (login required) explains the technical processes that occur when you type a URL into a browser and press enter:

1. **DNS Lookup**: The browser checks the URL to find the corresponding IP address using DNS.
2. **TCP Connection**: The browser establishes a TCP connection with the server.
3. **HTTP Request**: The browser sends an HTTP request to the server.
4. **Server Response**: The server processes the request and sends back an HTTP response.
5. **Rendering**: The browser renders the HTML content, along with CSS and JavaScript, to display the web page.

{% embed url="<https://medium.com/@maneesa/what-happens-when-you-type-an-url-in-the-browser-and-press-enter-bb0aa2449c1a>" %}

### d. How the Internet Works (a round-up lecture)

Justyn Oh, Software Engineer at Open Government Products, shares a crash-course framework on How the Internet Works, and some takeaways for policy-makers.

{% embed url="<https://docs.google.com/presentation/d/1O3754vQuw6JevvcGn9_dwySP58RjIw39NI1N0EByDlY/edit#slide=id.g29d0d78fc24_2_357>" %}

***

## Week 2 (4 hours): Selected presentations from TechUp 2.0 and reading materials on Product Thinking

### a. ProductUp slides&#x20;

ProductUp is a half-day workshop conducted by Open Government Product's Product Managers on the overall product development process, from problem statements, to identifying target audience, to user journeys, all the way to iterating and funding successful projects. While this workshop is most effective in a hands-on setting, the slides and exercises will give you an overview of the thinking behind the product process.&#x20;

{% embed url="<https://docs.google.com/presentation/d/1w20ZBRvz1tSg70leLDN8uJwpnZwfhI2nrCAMnttuFCs/edit#slide=id.g270947eab77_0_0>" %}

### b. Product Management in Software Development: How it Works&#x20;

To expand on ProductUp, this video explains what product management means, including product market fit, product vision, strategy, understanding customers, product execution and product KPIs.

{% embed url="<https://www.youtube.com/watch?v=7j4WGVAsf4Y>" %}

### c. Products 101: What is 'good' product?

Conducted by Director/Products Directorate Chen Kaiwei, this session explains the outline of how to pitch a successful product, what a good problem statement is, and how to define outcome metrics.&#x20;

{% embed url="<https://drive.google.com/file/d/1qjs0UnDl_vOuEyz9nUb-WMb0Jf6F7ttm/view>" %}

### d. DesignUp&#x20;

The following presentations by Design Manager Mike Chen & Lead UX Researcher Darren Ng cover:&#x20;

* What is good design?&#x20;
* How do you design your prototype?&#x20;
* How do you test your prototype?&#x20;

{% embed url="<https://docs.google.com/presentation/d/1k36FVB403Ml6Dh3u1T-egI6Brs2ASWu616fZ8teET5U/edit#slide=id.g2d0d0123933_0_1885>" %}

{% embed url="<https://docs.google.com/presentation/d/1X4qJUZ89l3y8oBCMYtCen4U2NJmcG-pfXCxB6pzy9Gk/edit#slide=id.p>" %}

{% embed url="<https://docs.google.com/presentation/d/1x5WVSFFjsWYPC41jTPoAPTxMPS_1k9PE9C774jbLXuM/edit#slide=id.g26fd8707128_0_1116>" %}

{% embed url="<https://docs.google.com/presentation/d/1W13VPYOtyxyPzvdioJEjtj7NpXWyIv56X8UKLLxaq6I/edit#slide=id.g270080c34aa_0_728>" %}

{% embed url="<https://docs.google.com/presentation/d/1S8IR8_bx_piQD2ODKfJ7SI97jkZ2vtQ2owS9r_6ykcQ/edit#slide=id.g2d14a94e128_0_545>" %}

{% embed url="<https://docs.google.com/presentation/d/1g2eSeUgnGkZAh2bwNcxmuS74DUHN8U0-2R3_VMZ4kcA/edit#slide=id.g2d14a94e128_0_627>" %}

### e. Agile product ownership in a nutshell

This video provides an overview of the roles and responsibilities of a Product Owner within an Agile development framework. It highlights key concepts such as **prioritizing the product backlog, defining user stories, ensuring clear communication with the development team, and maintaining a focus on delivering value to the customer**. The video emphasizes the importance of collaboration, iterative progress, and adaptability in the product development process.

{% embed url="<https://www.youtube.com/watch?v=502ILHjX9EE>" %}

### f. Product Metrics: How to Measure Product Success

This video explains which North Star metrics report on the product’s successes and failures. Key topics covered are: What is success for you, What are metrics (KPIs)?, user acquisition metrics, user engagement metrics, and financial metrics.&#x20;

{% embed url="<https://www.youtube.com/watch?v=wtDFgx41Rho>" %}

***

## Weeks 3-6 (20+ hours): Web Development&#x20;

### a. Selected modules of the Complete 2024 Web Development Bootcamp on Udemy

The Complete 2024 Web Development Bootcamp on Udemy is a comprehensive course designed to teach students everything they need to become professional web developers. It covers **front-end and back-end development**, including **HTML, CSS, JavaScript, Node.js, React, PostgreSQL**, and more, including practical exercises to build real-world applications. The course is suitable for beginners, with step-by-step instructions and explanations.&#x20;

We have selected a few of the more important modules (marked with "❗") that we recommend learners to focus on:&#x20;

{% content-ref url="/pages/LmhXUCbS9FKdyQkK737m" %}
[Mandatory Course (Udemy)](/programme-essentials/mandatory-course-udemy)
{% endcontent-ref %}

### b. Primers to understand Web Development&#x20;

The TechUp team has also prepared primers to break down key concepts related to **front-end development, Git/GitHub, HTML, CSS, JavaScript, back-end development Databases and APIs.** These are short lectures with some hands-on exercises.&#x20;

{% content-ref url="/pages/xov6CIR8Qlty449ITxdW" %}
[Programme Materials](/programme-essentials/programme-materials)
{% endcontent-ref %}

***

## Weeks 7-10 and beyond (40+ hours): CS50 for Lawyers (highly recommended as a bonus)&#x20;

CS50 for Lawyers is a highly-rated and well-acclaimed version of Harvard's renowned introductory computer science course tailored specifically for non-technical professionals. It provides a broad overview of computer science and programming, aimed at helping lawyers understand the technology landscape. Key topics include **algorithms, data structures, cryptography, cybersecurity, and the basics of programming languages like Python and SQL**. The course focuses on practical applications in the legal field, enabling lawyers to better navigate tech-related cases, communicate with technical experts, and understand the implications of technology on law.

{% embed url="<https://pll.harvard.edu/course/cs50-lawyers>" %}

CS50 for Lawyers is designed to be completed in **about 10 weeks**, with an estimated time commitment of **6 to 9 hours per week**. It is particularly beneficial for policy officers who interact with technology but are not directly responsible for tech policy, strategy, or planning.

<br>


# Why do TechUp

## SN Group Mission

> “Many countries and cities have similar ambitions to become smart nations or smart cities. The concepts and ideas vary. For us, being a smart nation is not about flaunting glitzy technology, but it is about <mark style="background-color:yellow;">applying technology to solve real world problems</mark> that will make a difference to people’s lives, and across the whole of society.”
>
> *Prime Minister Lee Hsien Loong*

Our core mission as SN is to apply technology to solve real world problems. In order to deliver on Smart Nation ambition, we need to take training and skills development very seriously to stay relevant.&#x20;

TechUp aims to equip SN officers with baseline modern technical skills so that officers can effectively apply technology to solve real-world problems.&#x20;

The goals are for every SN officer to:&#x20;

1. Have a basic understanding of modern technology
2. Adopt an agile, iterative, problem-solving mindset, and
3. Connect with other teams and members of SN.


# Learning Outcomes

## Learn web development, UX design and product fundamentals to build a basic web app <a href="#learn-web-development-ux-design-and-product-fundamentals-to-build-a-basic-web-app" id="learn-web-development-ux-design-and-product-fundamentals-to-build-a-basic-web-app"></a>

1. Master the core principles of web development, including front-end and back-end technologies, databases, and APIs to develop a simple web app
2. Acquire a basic understanding of user experience (UX) design principles, including user research, wireframing, prototyping, and usability testing
3. Learn the fundamentals of product development, including product lifecycle management, agile methodologies, and project management

## Utilise the design thinking approach to unpack problem statements <a href="#utilise-the-design-thinking-approach-to-unpack-problem-statements" id="utilise-the-design-thinking-approach-to-unpack-problem-statements"></a>

1. Learn the principles of design thinking, including empathy, ideation, and prototyping
2. Practice techniques for empathizing with end-users to gain insights into their needs and pain points
3. Apply ideation methods to creatively brainstorm solutions and identify innovative approaches to problem-solving

## Apply the design thinking mindset and approach to build prototypes that solve real-world problems <a href="#apply-the-design-thinking-mindset-and-approach-to-build-prototypes-that-solve-real-world-problems" id="apply-the-design-thinking-mindset-and-approach-to-build-prototypes-that-solve-real-world-problems"></a>

1. Develop and present a functional basic prototype that addresses problem statements identified during the process


# Rules of Engagement

## Our Values

To make the programme productive and pleasant for everyone, we request that everyone abide by the following rules of engagement:

<details>

<summary>🚀 Punctuality</summary>

Please make the effort to be punctual for the sessions, especially in-person ones. This will minimise distractions to others during the session, and show respect to the speakers and facilitators who have put in the time and effort to create the learning experience for you.

</details>

<details>

<summary>✊ Self-help and help others</summary>

Coding is best learnt through an experiential process of trial and error and troubleshooting. Some ways you can troubleshoot on your own are to run your code through ChatGPT (or other equivalent LLMs) and try the proposed solutions, or check [Stack Overflow](https://stackoverflow.com/), Reddit or Google to see if others have encountered the same problem that was resolved by other contributors.&#x20;

You can also seek help from other colleagues in your learning group or other learning groups who have coding skills and knowledge to help with troubleshooting.&#x20;

If your question is not urgent, leave a comment on the [FAQ page](/programme-essentials/frequently-asked-questions) and wait for it to be answered.&#x20;

Lastly, if all else fails or if your question is urgent, you can also approach the respective team(s) and/or POCs who have kindly volunteered their time.&#x20;

Before you do approach someone else about a problem with your code, please read the following guide on how to ask good questions:

1. **Before asking**\
   Go through your code line by line and be clear about what each line of code is doing. Check for any typos in syntax, and make sure you have run your code through ChatGPT or Googled the errors.&#x20;
2. **When asking**\
   Be specific about what your ask is, with as many details as possible, including what solutions you have tried. \
   You should address questions such as what language, framework, library version, software, operating system and version are you using and experiencing the problem on? Provide relevant code along with your question if possible. Explain the command or steps that led up to you experiencing the problem, and whether the problem was reproducible. Describe what you have tried to fix the problem. \
   e.g. "Would anyone be able to troubleshoot with me why I encountered the error message "unable to connect to server: connection is bad: nodename nor servname provided, or not known" when using Render to deploy my app on a Mac laptop?" is a better question than "My app is not loading, can anyone help me?"
3. **After asking**\
   Thank the person and do not take it for granted that they are obliged to help you. If your problem is indeed resolved, do close the loop with them (so they can celebrate your successes with you too!). If your problem is not resolved, let them know too, so they can assess if they need to refer you to someone else who might be able to help you instead.&#x20;

</details>

<details>

<summary>💪 Accountability</summary>

This programme was designed for you because the organisation believes in investing in your learning and development. While there are guidelines and deliverables required of you, what you take away from this programme is what you make of it. We highly encourage you to take this month of learning seriously and be accountable for your own learning. If you foresee or are experiencing any situation that may compromise this, please reach out to the organising committee to explore solutions.&#x20;

TechUp is a full-time programme, and TechUp is mandatory for all DTC officers and management as part of DTC's 100 hours learning initiative.&#x20;

If you need to be excused on any of the days due to valid reasons, you will need to inform the TechUp team and also seek your director’s approval.&#x20;

</details>


# Deliverables

1. Build and deploy a sample web application together with instructors.&#x20;

{% hint style="info" %}
Not sure what a web application is? Read about it [here](/resources/recommended-reading/web-development-and-web-application).
{% endhint %}

* Source code can be found [here](/programme-essentials/sample-web-app)
* Your sample web application should:

  a. Be successfully deployed using Render.com\
  b. Contain a blog post that describes your problem statement and solution (which will be your web app - see #2 below)

{% embed url="<https://sample.techup.live>" fullWidth="false" %}
Sample web app
{% endembed %}

2. Build your own web app that solves a problem of your choice. The web app you build should meet the requirements below. You are required to present your web app on either 27 May or 28 May. More details will be updated [here](/web-app-presentations/presentation-schedule) soon.&#x20;

* Articulate a user problem
* Use CSS to design and style page
* Interactivity with Javascript
* Intuitive UX flow
* Reading and writing into a database (optional)

{% hint style="info" %}
Web app MUST be deployed to the Internet and hosted as a live website using Render, with a custom domain name and CDN purchased from Cloudflare and connected to Google Analytics.
{% endhint %}

***

## For Advanced Participants

Advanced participants can challenge yourself to do one or more of the following:

1. Automated monitoring for their web app (e.g. using Datadog or Uptime Robot)
2. Implement Continuous Integration and Development (CI/CD) - write test cases that run automatically each time their app gets deployed, to help them catch errors
3. Use an automated security testing tool to prove that their web apps are secure
4. Web app can address a real existing problem statement contributed by other public service agencies


# Legal Note

Please take note of the following for your web apps, as they will be published live on the Internet:&#x20;

1. Your web app must contain the following footer:

{% hint style="info" %}
**Disclaimer:**

This website is created for learning purposes only. The information provided here should not be considered professional advice. Please note that we make no guarantees regarding the accuracy, completeness, or reliability of the contents of this website. Any actions you take based on the contents of this website are at your own risk. We are not liable for any losses or damages incurred from the use of this website.
{% endhint %}

2. Avoid any mention of the Singapore Government, Public Service, Civil Service, or your own agency, in your web app, so that it is clear that the information provided is not attributable to the Singapore Government or other public agencies.
3. Note that the Government owns the intellectual property rights in works created by its employees in the course of employment or pursuant to the terms of their employment.
4. Ensure that your web app does not engage in, link to, or otherwise facilitate any illegal activity.
5. Avoid incorporating any functions in your web app that involve payment, transfer of funds, or receipt of monies.
6. Please bear in mind potential intellectual property as well as confidentiality and data privacy issues when designing your web app, such as:
   * **Copyright**. Ensure that the elements used in your web app do not infringe the rights of copyright owners. Subject-matter which may be covered by copyright includes literary works, such as books, song lyrics, news or journal articles, and, importantly, source code; dramatic works, such as film and drama scripts, and choreographic scripts for shows or dance routines; musical works, such as sheet music; artistic works, such as paintings, drawings, sculptures, photographs, engravings, and other works of artistic craftmanship; sound recordings; films; television and radio broadcasts; cable programmes; and live performance (audio).\
     \
     In particular:

     * Any source code which you incorporate into your web app should either created by you, open source, or used with permission. Avoid using copyrighted code without proper licensing.
     * Any logos and other images and illustrations, music, and videos that you use in your web app should either be designed by you, open source, royalty-free, or used with permission. If you are not sure about the source of an image, try to do a quick reverse image search to find out its provenance, and whether it's covered by copyright.

   * **Trade Marks**. A trade mark is a sign used in the course of business or trade to distinguish one's goods or services from those of others. Ensure that your web app name, logos, taglines, or any other elements do not infringe on existing trade marks, for example, those used by companies or brands.

   * **Confidentiality and Data Privacy**. Avoid processing, storing, or displaying any sensitive or confidential information, including confidential personal data, via your web app. This is especially if you are using databases with your web app.


# Venues

You may refer to the latest programme schedule during the programme for the most up-to-date venues for each session, but broadly:

1. All in-person workshops and sessions will be held at **Mapletree Business Centre (MBC) Block 30 Level 11 Jupiter Rooms**.&#x20;
   1. You have already been pre-registered for building access at MBC30. When you arrive, please approach the security guards at the reception counter and let them know you are here for TechUp, your name as well as your agency.&#x20;
   2. If you have any issues with accessing the building, please call Dawn at 9631 8021.&#x20;
   3. Do expect that during the morning peak period, there will be a large number of people lining up at the security counter to enter the building, and waiting to use the limited lifts at the lobby. Do come earlier if you can so that there is sufficient time for you to wait for available lifts to go up to Level 11 where the Jupiter Rooms are.&#x20;
2. Office hours may be held at either OGP pantry at **Lazada One building (51 Bras Basah Road)** or **MBC30 Jupiter Room / GovTech Pantry**. Please refer to the programme schedule for more details.&#x20;
3. Web App Presentations on 27 and 28 May are held at **SNDGO office at Funan**. The room allocations will be briefed to you nearer the date.
4. Demo Day on 29 May will be at **MCI Atrium** (public access is possible).

## Additional Notes:

* **Please be punctual for all sessions** out of respect to the speakers who have put in the effort to make this programme fruitful for you. **We would highly encourage participants to take public transport to MBC especially in the mornings due to bad traffic.**
* If you intend to take taxi / private hire cars, please cater for sufficient buffer time. **You are also highly encouraged to carpool.** Do also make use of the #carpool channel (search: Carpool on Slack) to look for others living near you to carpool to MBC for financial prudence. Please adhere to the transport claim guidelines for your respective agency.&#x20;

## How to get there&#x20;

{% tabs %}
{% tab title="GovTech Jupiter Rooms 1 & 2" %}

#### Address <a href="#public-transport" id="public-transport"></a>

Mapletree Business Centre (MBC) Block 30 Level 11 Jupiter Rooms 1 and 2

#### Access <a href="#public-transport" id="public-transport"></a>

Please provide your full name (as in NRIC) along with your agency name, to Dawn.

#### Public Transport

Nearest MRT station: Labrador Park

#### Parking Information <a href="#parking-information" id="parking-information"></a>

Please see below for the parking charges at MBC:&#x20;

<figure><img src="https://4000871720-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F3JeKot5J5CqiKNQnsgZV%2Fuploads%2FXjaFmty5fixqg4PmkNcu%2FMBC%20parking%20charges.jpg?alt=media&amp;token=003f1272-13f2-480b-8385-000c725a48b9" alt=""><figcaption></figcaption></figure>
{% endtab %}

{% tab title="SNDGO office" %}

#### Address <a href="#public-transport" id="public-transport"></a>

Funan Tower 2 Level 6

#### Access <a href="#public-transport" id="public-transport"></a>

Please reach out to Dawn with your full name and mobile number.

#### Public Transport

Nearest MRT station: City Hall, Clarke Quay

#### Parking Information <a href="#parking-information" id="parking-information"></a>

If you are driving, the nearest carpark is Funan's public carpark.&#x20;
{% endtab %}

{% tab title="OGP office" %}

#### Address <a href="#public-transport" id="public-transport"></a>

51 Bras Basah Road, Lazada One, #04-08 Singapore 189554

#### Access <a href="#public-transport" id="public-transport"></a>

Please reach out to Dawn with your full name and mobile number.

#### Public Transport

Nearest MRT station: Brash Basah, Bencoolen&#x20;

#### Parking Information <a href="#parking-information" id="parking-information"></a>

TBC
{% endtab %}

{% tab title="MCI Atrium" %}

#### Address <a href="#public-transport" id="public-transport"></a>

140 Hill Street #01-01A. Singapore 179369

#### Access <a href="#public-transport" id="public-transport"></a>

Publicly accessible

#### Public Transport

Nearest MRT station: Clarke Quay, City Hall

#### Parking Information <a href="#parking-information" id="parking-information"></a>

We highly encourage participants to take public transport due to limited parking available. MCI parking lots are reserved for VIPs. Alternatively, you may wish to park at Clark Quay, which is free for the first 2 hours.&#x20;
{% endtab %}
{% endtabs %}


# Slack

{% hint style="info" %}
Slack will be the main channel of communication and information dissemination for this run of TechUp. Please familiarise yourself on how to use Slack.
{% endhint %}

You should have already received the email invite to TechUp’s workspace on Slack, as well as the 2FA authentication email, from IMDA. Please be reminded to change your profile picture once you have set up your account, for our identification purposes.

You are highly encouraged to download Slack on your phone and the laptop which you will be using for easier access during the course. For those of you who are loaning a laptop from us, Slack has already been pre-downloaded for you.&#x20;

Please take a few minutes to familiarize yourself with how to use Slack. If you are unfamiliar with Slack, please refer to this [short video](https://www.youtube.com/watch?v=FTuOS8E1LZk), or this [tutorial](https://slack.com/intl/en-gb/help/articles/360059928654-How-to-use-Slack--your-quick-start-guide), for a quick guide on Slack’s various features. It is important for you to familiarize yourself with the features of Slack as we will be relying on this tool heavily throughout the course for all communication purposes.  &#x20;

***

## Step 1: Start here

{% embed url="<https://opengov.notion.site/Instructions-to-Set-Up-Slack-Account-5cb4c896b6264bf497f1ffdb038caea7>" %}

## Step 2: Download Slack for mobile and desktop

* Android users download [here](https://play.google.com/store/apps/details?id=com.Slack\&pli=1)
* iOS users download [here](https://itunes.apple.com/app/slack-app/id618783545?ls=1\&mt=8)
* Windows download [here](https://slack.com/intl/en-gb/downloads/windows)
* Mac download [here](https://slack.com/intl/en-gb/downloads/mac)

## Step 3: Complete the tasks in the checklist below

[Slack Checklist](/admin-instructions/slack/slack-checklist)

## Step 4: Read this if you're new to using Slack

{% embed url="<https://slack.com/intl/en-gb/help/articles/218080037-Getting-started-for-new-Slack-users>" %}


# Slack Checklist

## How to get started

Check off the list below to ensure that you are good to go - otherwise please reach out to Dawn for help.

* [ ] Downloaded Slack for mobile and desktop
* [ ] Added to a learning group channel
* [ ] Added to general and help channels&#x20;
  * [ ] \#general
  * [ ] \#design-help
  * [ ] \#engineering-help
  * [ ] \#admin-help
  * [ ] \#setup-help
* [ ] Added to fun channels
  * [ ] \#open-jio
  * [ ] \#carpool
* [ ] Know basic Slack functions
  * [ ] Send messages&#x20;
  * [ ] React to messages
  * [ ] Join channel


# Tooling and Software

Please register accounts for:

1. [Github](https://github.com/signup)
2. [Render](https://dashboard.render.com/register) (Note: Use the create using GitHub option)
3. [Cloudflare](https://dash.cloudflare.com/sign-up)
4. [Google Analytics](https://analytics.google.com/analytics/web/provision/#/provision)

### Additional notes

* You are highly encouraged to download the Google Chrome browser (<https://www.google.com/intl/en_sg/chrome/>) if you haven’t done so already, as the developer tools work much better with Chrome than with Safari or Internet Explorer. Please also ensure that the computer you are using has administrator permissions to download additional software as needed during the TechUp programme.


# Tooling Claims Instructions

Each participant will be allocated a budget on tooling required for TechUp (e.g. to purchase domain name, CDN). The exact amount has been communicated&#x20;

### DTC colleagues:

HC colleagues have helped to raise the AOR collectively. You should submit your claims using the guide attached in the first admin email sent to you on 27 Mar 2024.&#x20;

### IMDA colleagues&#x20;

Jaslyn has raised the AOR on your behalf, please approach her for queries on claims.&#x20;

### MCI (including NAIG) colleagues

Rachel Lim is your POC for all tooling-related claims. Please approach her for any queries.

### GOVTECH and all other colleagues

You should raise your own AOR for the necessary tooling requirements. A sample AOR has been attached in the first admin email sent to you that you can use to adapt to your own needs.


# GitHub

## Creating a GitHub account

### 1. Go to <https://github.com> and click on Sign Up

<figure><img src="https://4000871720-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F3JeKot5J5CqiKNQnsgZV%2Fuploads%2FM6cqSTwguDcrl5YDkPDH%2FScreenshot%202024-04-22%20at%204.20.38%E2%80%AFPM.png?alt=media&amp;token=fe0b7d66-eceb-4e71-8e39-acfc8160982c" alt=""><figcaption><p>Click on the Sign Up button</p></figcaption></figure>

### 2. Enter your email address

<figure><img src="https://4000871720-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F3JeKot5J5CqiKNQnsgZV%2Fuploads%2Fd1uYtF4BwnZdj0iwySem%2FScreenshot%202024-04-22%20at%204.20.45%E2%80%AFPM.png?alt=media&amp;token=41a72255-c491-4f7e-9b5c-98fb1510064a" alt=""><figcaption><p>Enter your email address and click continue</p></figcaption></figure>

### 3. Create a password

<figure><img src="https://4000871720-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F3JeKot5J5CqiKNQnsgZV%2Fuploads%2FzyByVaRmUGfPgdRBefN3%2FScreenshot%202024-04-22%20at%204.20.55%E2%80%AFPM.png?alt=media&amp;token=4038b59c-1b9d-4715-a432-d123df3542c8" alt=""><figcaption><p>Enter a password and click continue</p></figcaption></figure>

### 4. Enter a username of your choice

<figure><img src="https://4000871720-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F3JeKot5J5CqiKNQnsgZV%2Fuploads%2F4MBOf1WUJpicfd5wUBN1%2FScreenshot%202024-04-22%20at%204.21.09%E2%80%AFPM.png?alt=media&amp;token=01e37ddb-7704-480b-8e72-e9e00c932564" alt=""><figcaption><p>Enter a username and click continue</p></figcaption></figure>

### 5. Select your email preferences

<figure><img src="https://4000871720-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F3JeKot5J5CqiKNQnsgZV%2Fuploads%2FGZG2O3YgGu5i9CBdZsUf%2FScreenshot%202024-04-22%20at%204.21.24%E2%80%AFPM.png?alt=media&amp;token=a2924f29-4659-4d0e-b12d-9fe6bb5c2370" alt=""><figcaption><p>Select your email preferences and click continue</p></figcaption></figure>

### 6. Complete the human verification puzzle

<figure><img src="https://4000871720-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F3JeKot5J5CqiKNQnsgZV%2Fuploads%2FdPaFWT9DIREE0XuiN5mq%2FScreenshot%202024-04-22%20at%204.22.04%E2%80%AFPM.png?alt=media&amp;token=081c3313-c4ca-41a1-b0d8-5232fce232c0" alt=""><figcaption><p>Complete the puzzle to verify that you are human</p></figcaption></figure>

### 7. Verify your email with the code sent to your email address

<figure><img src="https://4000871720-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F3JeKot5J5CqiKNQnsgZV%2Fuploads%2FruTuAb8ziMh0h6dWqwUJ%2FScreenshot%202024-04-22%20at%204.22.24%E2%80%AFPM.png?alt=media&amp;token=94a04da8-7351-461d-891f-82ee622966f7" alt=""><figcaption><p>Verify your account by typing in the code sent to your email</p></figcaption></figure>

### 8. Skip Personalisation

<figure><img src="https://4000871720-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F3JeKot5J5CqiKNQnsgZV%2Fuploads%2FMBpACUtDYXt77oodPVKm%2FScreenshot%202024-04-22%20at%204.22.39%E2%80%AFPM.png?alt=media&amp;token=8a9780ba-f8f5-479e-af3a-a953fd798220" alt=""><figcaption><p>Skip personalisation</p></figcaption></figure>

### 9. Congrats! You now have a GitHub account created!&#x20;

<figure><img src="https://4000871720-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F3JeKot5J5CqiKNQnsgZV%2Fuploads%2FNAspb1hFaywHQA6vuzgR%2FScreenshot%202024-04-22%20at%204.23.31%E2%80%AFPM.png?alt=media&amp;token=dd47ee29-e757-4462-b1fb-616e603bb089" alt=""><figcaption><p>🎉 You now have a GitHub account!</p></figcaption></figure>


# Cloudflare

## Creating a Cloudflare account

Follow the instructions in this page below to create your Cloudflare account.

{% embed url="<https://developers.cloudflare.com/fundamentals/setup/account/create-account/>" %}

## Registering a Domain Name (also known as buying a domain name)

### 1. Login to Cloudflare Dashboard ([dash.cloudflare.com](https://dash.cloudflare.com/)) and click on Register Domains in the sidebar

<figure><img src="https://4000871720-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F3JeKot5J5CqiKNQnsgZV%2Fuploads%2FY1KgAHJEuX1Jgboky8Rz%2FScreenshot%202024-04-29%20at%209.45.09%E2%80%AFAM.png?alt=media&amp;token=890b71ac-9bd9-4c69-857e-510b589b8f59" alt=""><figcaption><p>Click on Register Domains to bring you to this page</p></figcaption></figure>

### 2. Type in a domain name of your choice and click purchase

<figure><img src="https://4000871720-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F3JeKot5J5CqiKNQnsgZV%2Fuploads%2FzIZxJ2fWHRJoShP8VtSb%2FScreenshot%202024-04-29%20at%2011.50.15%E2%80%AFAM.png?alt=media&amp;token=41c25f5f-47e5-4e75-88b7-f846b5a420bd" alt=""><figcaption><p>Enter a domain name and click on purchase</p></figcaption></figure>

### 3. Select a 1 year registration and fill in your registrant information

<figure><img src="https://4000871720-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F3JeKot5J5CqiKNQnsgZV%2Fuploads%2FhE7lzsdR5TvWdAs4Nx3p%2FScreenshot%202024-04-29%20at%2011.52.56%E2%80%AFAM.png?alt=media&amp;token=24d033bd-6101-4ef3-9cda-9334c32db61d" alt=""><figcaption><p>Select 1 year and fill in the registrant information section</p></figcaption></figure>

### 4. Select the payment method of your choice

<figure><img src="https://4000871720-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F3JeKot5J5CqiKNQnsgZV%2Fuploads%2Fkqqk8P6JvJsldFzQr4fK%2FScreenshot%202024-04-29%20at%2012.00.32%E2%80%AFPM.png?alt=media&amp;token=22d1405c-7d64-41f6-87d1-0aa7550d2580" alt=""><figcaption><p>Select your payment method</p></figcaption></figure>

### 5. Click on Complete Purchase to buy your domain name

<figure><img src="https://4000871720-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F3JeKot5J5CqiKNQnsgZV%2Fuploads%2FUYNKaUxCa8MtX4tDwgSq%2FScreenshot%202024-04-29%20at%2012.01.00%E2%80%AFPM.png?alt=media&amp;token=4f51bc1b-40e7-4d1f-a887-354dea88d0e0" alt=""><figcaption><p>Click on complete purchase </p></figcaption></figure>

### 6. Congrats you've just purchased your domain name!

<figure><img src="https://4000871720-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F3JeKot5J5CqiKNQnsgZV%2Fuploads%2FCWTNcDtBRw4VtwqjXAjq%2FScreenshot%202024-04-29%20at%2012.01.36%E2%80%AFPM.png?alt=media&amp;token=7c195c9a-b136-443a-82ca-a85b8e620cbb" alt=""><figcaption><p>You should see this screen once you have purchased your domain name</p></figcaption></figure>

## Linking my domain name to my web app (using the Sample Web App as an example)

{% hint style="info" %}
You should have already set up your Sample Web App before linking your domain name. If you have yet to do so, please follow the instructions here [Sample Web App](/programme-essentials/sample-web-app).
{% endhint %}

To link your domain name to the sample web app, there are three things you will need to do:

* Enable full SSL/TLS encryption on Cloudflare
* Setup Render to use a custom domain name for your Sample Web App
* Setup Cloudflare's DNS to point to the Sample Web App deployed on Render

### 1. Go to Cloudflare Dashboard ([dash.cloudflare.com](https://dash.cloudflare.com)) and click on the domain name you purchased

<figure><img src="https://4000871720-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F3JeKot5J5CqiKNQnsgZV%2Fuploads%2FTMLq4ZMESSzrw30c2zel%2FScreenshot%202024-04-29%20at%203.05.21%E2%80%AFPM.png?alt=media&amp;token=2f9b5d95-94d1-4867-9436-6c7f5905af76" alt=""><figcaption><p>Click on your domain name</p></figcaption></figure>

### 2. Click on the SSL/TLS tab in the sidebar

<figure><img src="https://4000871720-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F3JeKot5J5CqiKNQnsgZV%2Fuploads%2Fhjyh4o6V2Us01iqlwCPK%2FScreenshot%202024-04-29%20at%201.44.40%E2%80%AFPM.png?alt=media&amp;token=65678bf1-4363-4070-951f-ff0da23bd56c" alt=""><figcaption><p>Click on the SSL/TLS tab in the sidebar</p></figcaption></figure>

### 3. Set the SSL/TLS encryption mode to Full

<figure><img src="https://4000871720-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F3JeKot5J5CqiKNQnsgZV%2Fuploads%2Fcjufjsh4kBqmsgh0KRO3%2FScreenshot%202024-04-29%20at%201.55.43%E2%80%AFPM.png?alt=media&amp;token=70592db8-14b5-40d9-b7bf-c71aa28c4137" alt=""><figcaption><p>Select Full to change SSL/TLS encryption mode</p></figcaption></figure>

<figure><img src="https://4000871720-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F3JeKot5J5CqiKNQnsgZV%2Fuploads%2FajGunX9Gdet4XhzhAtJN%2FScreenshot%202024-04-29%20at%201.55.48%E2%80%AFPM.png?alt=media&amp;token=308769fe-e479-4ca3-ae4c-51fea0b34bec" alt=""><figcaption><p>Click on Confirm to continue</p></figcaption></figure>

<figure><img src="https://4000871720-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F3JeKot5J5CqiKNQnsgZV%2Fuploads%2F1dTfiohNed5Jvg03uC8N%2FScreenshot%202024-04-29%20at%202.02.43%E2%80%AFPM.png?alt=media&amp;token=239ee88a-3a3f-4b06-a925-f3ebbef52e91" alt=""><figcaption><p>Your SSL/TLS encryption mode should now be set to full</p></figcaption></figure>

### 4. Go to Render Dashboard ([dashboard.render.com](https://dashboard.render.com/)) and click on your web app (in this example the sample web app is selected)

<figure><img src="https://4000871720-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F3JeKot5J5CqiKNQnsgZV%2Fuploads%2F35PhlTLu1xGRClMXD20l%2FScreenshot%202024-04-29%20at%204.18.38%E2%80%AFPM.png?alt=media&amp;token=cd48d95d-b787-4e0a-8411-61ffd1c2e352" alt=""><figcaption><p>Select your web application on Render</p></figcaption></figure>

### 5. Click on Settings to Add a Custom Domain Name&#x20;

<figure><img src="https://4000871720-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F3JeKot5J5CqiKNQnsgZV%2Fuploads%2FMSVJhx2wkUMcbqc6dke2%2FScreenshot%202024-04-29%20at%204.18.50%E2%80%AFPM.png?alt=media&amp;token=b31141c3-337e-4fe7-8766-c692ac120a92" alt=""><figcaption><p>Click on Settings</p></figcaption></figure>

<figure><img src="https://4000871720-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F3JeKot5J5CqiKNQnsgZV%2Fuploads%2F861hrqoCQ3uAQ7bAFGDX%2FScreenshot%202024-04-29%20at%204.19.02%E2%80%AFPM.png?alt=media&amp;token=91641896-d9c1-439e-bdb4-bf58e69bf1bb" alt=""><figcaption><p>Scroll down to the section on custom domains </p></figcaption></figure>

<figure><img src="https://4000871720-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F3JeKot5J5CqiKNQnsgZV%2Fuploads%2FZXN1er6gncJTNujLfJr5%2FScreenshot%202024-04-29%20at%204.20.48%E2%80%AFPM.png?alt=media&amp;token=77541596-ecfb-4c06-99a8-5777552d8748" alt=""><figcaption><p>Enter your domain name and click save</p></figcaption></figure>

<figure><img src="https://4000871720-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F3JeKot5J5CqiKNQnsgZV%2Fuploads%2FjGdtC3TaVdd9aCXByBUe%2FScreenshot%202024-04-29%20at%204.20.55%E2%80%AFPM.png?alt=media&amp;token=ce741dd7-e132-4ba1-a5e1-e7edca0b23a9" alt=""><figcaption><p>You should see something similar, click on the copy icon to copy the onrender.com URL which will be used for the nest step</p></figcaption></figure>

### 6. Go to Cloudflare Dashboard ([dash.cloudflare.com](https://dash.cloudflare.com/)) and click on your domain name

<figure><img src="https://4000871720-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F3JeKot5J5CqiKNQnsgZV%2Fuploads%2FnnNEq0S7qWOAZU5ivApT%2FScreenshot%202024-04-29%20at%203.05.21%E2%80%AFPM.png?alt=media&amp;token=4ac014be-d949-4a6a-9fc8-1ce2d49d1539" alt=""><figcaption><p>Click on your domain name</p></figcaption></figure>

### 7. Click on DNS to go to the page to edit your DNS Records, then click on Add Record

<figure><img src="https://4000871720-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F3JeKot5J5CqiKNQnsgZV%2Fuploads%2Fj46QyaVl99zqDG4JyYDF%2FScreenshot%202024-04-29%20at%201.45.34%E2%80%AFPM.png?alt=media&amp;token=b3b7887a-9c7e-47dc-a641-c3646ffc472f" alt=""><figcaption><p>Click on DNS in the sidebar then click on Add Record</p></figcaption></figure>

### 8. Add a new DNS Record

<figure><img src="https://4000871720-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F3JeKot5J5CqiKNQnsgZV%2Fuploads%2FtQPKcDzMdPqouHGAsYH9%2FScreenshot%202024-04-29%20at%204.22.18%E2%80%AFPM.png?alt=media&amp;token=6e1481df-d2d5-4df9-bab7-95ab874106c3" alt=""><figcaption><p>Add a new CNAME record with the Target being the onrender.com URL you copied earlier in Step 5, then click Save</p></figcaption></figure>

### 9. Go back to your Render Dashboard and click on Verify

<figure><img src="https://4000871720-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F3JeKot5J5CqiKNQnsgZV%2Fuploads%2FhaK5wOFOfNx2dfUwZoiv%2FScreenshot%202024-04-29%20at%204.20.55%E2%80%AFPM.png?alt=media&amp;token=0d347806-f4a9-4c99-813d-a2fd18a71e9b" alt=""><figcaption><p>Click on Verify</p></figcaption></figure>

<figure><img src="https://4000871720-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F3JeKot5J5CqiKNQnsgZV%2Fuploads%2F1y0MoztEbWPM3tZqmw5T%2FScreenshot%202024-04-29%20at%204.23.57%E2%80%AFPM.png?alt=media&amp;token=4191432b-243f-4ec3-98b6-1f38efa7fdd4" alt=""><figcaption><p>It may take some time for the domain to be verified and for a certificate to be automatically generated</p></figcaption></figure>

<figure><img src="https://4000871720-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F3JeKot5J5CqiKNQnsgZV%2Fuploads%2FOWZvBaYzA8Ni3EShEQkj%2FScreenshot%202024-04-29%20at%204.32.43%E2%80%AFPM.png?alt=media&amp;token=257db9da-15a9-4bb5-8686-cf932fc559cc" alt=""><figcaption><p>Congrats! You have now set up a custom domain name for your app!</p></figcaption></figure>


# Render

## Creating a Render account

{% hint style="info" %}
Create a GitHub account first if you haven't already done so. Instructions on how to create a GitHub account can be found on this page [GitHub](/admin-instructions/tooling-and-software/github).
{% endhint %}

### 1. Go to <https://dashboard.render.com> and click on GitHub. (<mark style="background-color:red;">DO NOT CREATE AN ACCOUNT VIA OTHER OPTIONS</mark>)

<figure><img src="https://4000871720-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F3JeKot5J5CqiKNQnsgZV%2Fuploads%2FCNw71jb2O0Uj76MJ6FbT%2FScreenshot%202024-04-22%20at%204.47.00%E2%80%AFPM.png?alt=media&amp;token=39e06ab5-8cea-4fb2-acbc-c1b0db664952" alt=""><figcaption><p>Click on GitHub (Do not click on other options)</p></figcaption></figure>

### 2. Authorise Render

<figure><img src="https://4000871720-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F3JeKot5J5CqiKNQnsgZV%2Fuploads%2FeZ8HpmGWKFOJLZzYHIZy%2FScreenshot%202024-04-22%20at%204.57.16%E2%80%AFPM.png?alt=media&amp;token=1eee3003-ffd4-4175-b8e6-20176c544756" alt=""><figcaption><p>You will be redirected to GitHub, click on Authorise Render</p></figcaption></figure>

### 3. Enter your email address and click Create Account

<figure><img src="https://4000871720-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F3JeKot5J5CqiKNQnsgZV%2Fuploads%2FLrQp80TiSNrU6wVETrOS%2FScreenshot%202024-04-22%20at%204.57.51%E2%80%AFPM.png?alt=media&amp;token=0b49edc5-eceb-4c37-b06d-948eda42e1f7" alt=""><figcaption><p>Enter your email then click Create Account</p></figcaption></figure>

### 4. Verify your email but clicking the link sent to your email address

<figure><img src="https://4000871720-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F3JeKot5J5CqiKNQnsgZV%2Fuploads%2Fah1eHtCOq47aOYRTC4Pf%2FScreenshot%202024-04-22%20at%204.58.16%E2%80%AFPM.png?alt=media&amp;token=febbdfbe-ba37-4f6f-a1ac-51a832199cac" alt=""><figcaption><p>You will be directed to this page, go to your email to retrieve the verification link</p></figcaption></figure>

<figure><img src="https://4000871720-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F3JeKot5J5CqiKNQnsgZV%2Fuploads%2FMN1XrbHBeeVgY6PA9Czy%2FScreenshot%202024-04-22%20at%204.58.27%E2%80%AFPM.png?alt=media&amp;token=22ca7458-3d02-4089-81e0-aaa030b36085" alt=""><figcaption><p>Click on the link in your email to verify your email</p></figcaption></figure>

### 5. Fill up the form and click on Continue to Render

<figure><img src="https://4000871720-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F3JeKot5J5CqiKNQnsgZV%2Fuploads%2FbUHwnqMlylORM1wS1Clt%2FScreenshot%202024-04-22%20at%204.59.07%E2%80%AFPM.png?alt=media&amp;token=0fa85db2-ab16-4d3a-95c3-e68f85de0585" alt=""><figcaption><p>You will be redirected to this page after clicking the verification link. Fill up the form and click on Continue to Render</p></figcaption></figure>

### 6. Congrats! You now have a Render account created!

<figure><img src="https://4000871720-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F3JeKot5J5CqiKNQnsgZV%2Fuploads%2FR0oAoasmnqCyqtqvvlVC%2FScreenshot%202024-04-22%20at%204.59.13%E2%80%AFPM.png?alt=media&amp;token=a313c5d7-4da3-4b39-9806-4db679367c7d" alt=""><figcaption><p>🎉 You now have a Render account!</p></figcaption></figure>

## Deploying my Website (without a Backend)

### 1. Open Render Dashboard (<https://dashboard.render.com>) and click on New Static Site.

<figure><img src="https://4000871720-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F3JeKot5J5CqiKNQnsgZV%2Fuploads%2FnQhGUbznzJSPpOmZ0hQt%2FScreenshot%202024-05-02%20at%201.44.44%E2%80%AFPM.png?alt=media&amp;token=625dd69e-3993-4c94-bc52-7010c3f874c4" alt=""><figcaption><p>Click on New Static Site</p></figcaption></figure>

### 2. Connect to your repository

<figure><img src="https://4000871720-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F3JeKot5J5CqiKNQnsgZV%2Fuploads%2FrG8imJQEJaMeUsElg024%2FScreenshot%202024-05-02%20at%201.46.49%E2%80%AFPM.png?alt=media&amp;token=7297b5b3-63bd-4aed-a918-651e8f0f0422" alt=""><figcaption><p>Click on Connect</p></figcaption></figure>

### 3. Set the publish directory to "." and click Create Static Site

<figure><img src="https://4000871720-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F3JeKot5J5CqiKNQnsgZV%2Fuploads%2FTFeX3gBmzPJDxDBWExex%2FScreenshot%202024-05-02%20at%201.50.46%E2%80%AFPM.png?alt=media&amp;token=8ef45ac6-698e-44d6-93eb-98221f6ce3de" alt=""><figcaption><p>Set publish directory to "." and click Create Static Site</p></figcaption></figure>

### 4. Congrats, your website should now start building and successfully deployed!

<figure><img src="https://4000871720-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F3JeKot5J5CqiKNQnsgZV%2Fuploads%2FZcCC2HRufGwMNKMn8sUY%2FScreenshot%202024-05-02%20at%201.54.12%E2%80%AFPM.png?alt=media&amp;token=4c2fc00d-b006-4b02-b561-31bedff7b358" alt=""><figcaption><p>You website is now deployed!</p></figcaption></figure>

## (Optional) Deploying my Web App with a NodeJS Backend

### 1. Open Render Dashboard (<https://dashboard.render.com>) and click on New Web Service.

<figure><img src="https://4000871720-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F3JeKot5J5CqiKNQnsgZV%2Fuploads%2Fy2SNAy25EqGf6jBJi7si%2FScreenshot%202024-05-02%20at%203.58.24%E2%80%AFPM.png?alt=media&amp;token=6f315f7b-ea3e-4d9b-9870-005fea774e97" alt=""><figcaption><p>Click on New Web Service</p></figcaption></figure>

### 2. Select Build and deploy from a Git repository then click Next

<figure><img src="https://4000871720-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F3JeKot5J5CqiKNQnsgZV%2Fuploads%2Fof3F5I0GvaMg3OZXpD8g%2FScreenshot%202024-05-02%20at%203.59.17%E2%80%AFPM.png?alt=media&amp;token=32fa5eca-3ca1-4dd7-8776-75acf4bd497d" alt=""><figcaption><p>Click next once you have selected the Git repository option</p></figcaption></figure>

### 3. Connect to your GitHub Repository

<figure><img src="https://4000871720-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F3JeKot5J5CqiKNQnsgZV%2Fuploads%2FwEHtzNgMffTfGaKaWfUR%2FScreenshot%202024-05-02%20at%204.01.11%E2%80%AFPM.png?alt=media&amp;token=1b6648a3-24a1-49a2-8b33-5d486bb1d343" alt=""><figcaption><p>Select the repository for your NodeJS application and click connect</p></figcaption></figure>

### 4. Enter the Build and Start Command for your application (the screenshot assumes your routing filename is server.js)

<figure><img src="https://4000871720-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F3JeKot5J5CqiKNQnsgZV%2Fuploads%2FRUSu8Deu3n49SHyrdGy5%2FScreenshot%202024-05-02%20at%204.02.37%E2%80%AFPM.png?alt=media&amp;token=c8beaff3-ea18-4c2d-910e-f74ff65ea088" alt=""><figcaption><p>Enter the build command of "npm install" and start command of "node server.js" or "node app.js" if your filename is app.js</p></figcaption></figure>

### 5. Change the Instance Type to Free then click Create Web Service

<figure><img src="https://4000871720-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F3JeKot5J5CqiKNQnsgZV%2Fuploads%2FJzRhfjxM4Z2HorbmHDTp%2FScreenshot%202024-05-02%20at%204.05.49%E2%80%AFPM.png?alt=media&amp;token=d1becfb0-9e96-44f4-8c6d-dd373e651b05" alt=""><figcaption><p>Select the Free tier then click on Create Web Service</p></figcaption></figure>

### 6. Your application is now successfully deployed!

<figure><img src="https://4000871720-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F3JeKot5J5CqiKNQnsgZV%2Fuploads%2FVhRdKSDcW17lSdMgNKK8%2FScreenshot%202024-05-02%20at%204.21.53%E2%80%AFPM.png?alt=media&amp;token=9255bdbc-fccc-4790-bbdc-b3b7a0c9fdaf" alt=""><figcaption><p>Success!</p></figcaption></figure>

{% hint style="info" %}
Refer to [Sample Web App](/programme-essentials/sample-web-app) if you are looking for instructions on how to deploy a Postgres Database on Render.
{% endhint %}


# Google Analytics

{% hint style="info" %}
Setting up Google Analytics is extremely simple, all you need to do is to:

* Generate a Google Tag (just some JavaScript code)
* Copy this Google Tag in the \<head> section of every page you want to track
  {% endhint %}

## How to Set Up Google Analytics

### 1. Go to <https://marketingplatform.google.com/about/analytics/> and click on Get Started Today

<figure><img src="https://4000871720-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F3JeKot5J5CqiKNQnsgZV%2Fuploads%2FCsSop94aZLbx4KfUO6yv%2FScreenshot%202024-05-22%20at%2010.37.07%E2%80%AFPM.png?alt=media&amp;token=b3d40479-e506-4f75-acdd-a58cba3996e6" alt=""><figcaption></figcaption></figure>

### 2. After logging in to your Google Account, you will be redirected to the Setup page, click on Start Measuring

<figure><img src="https://4000871720-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F3JeKot5J5CqiKNQnsgZV%2Fuploads%2F4dVWOx74BgotqHNiBhjp%2FGoogle%20Analytics%20Setup.png?alt=media&amp;token=58ea3abd-8e26-42b6-aae6-08223bbcfac5" alt=""><figcaption></figcaption></figure>

### 3. Enter an account name then click next

<figure><img src="https://4000871720-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F3JeKot5J5CqiKNQnsgZV%2Fuploads%2F4o7hEpz38iL4dYg0nJA9%2FScreenshot%202024-05-22%20at%2011.10.59%E2%80%AFPM.png?alt=media&amp;token=ac87d8be-df2b-46f2-826f-fa5df95b28e5" alt=""><figcaption></figcaption></figure>

<figure><img src="https://4000871720-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F3JeKot5J5CqiKNQnsgZV%2Fuploads%2FbJJqGVB44VH4M19jUrak%2FScreenshot%202024-05-22%20at%2011.11.07%E2%80%AFPM.png?alt=media&amp;token=6c1e99f9-68f9-4848-97a3-00f28e20e881" alt=""><figcaption></figcaption></figure>

### 4. Enter a property name (and Singapore timezone and currency is selected) then click next

<figure><img src="https://4000871720-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F3JeKot5J5CqiKNQnsgZV%2Fuploads%2FYg9KJItWsTaMT7shJ7ki%2FScreenshot%202024-05-22%20at%2011.15.15%E2%80%AFPM.png?alt=media&amp;token=7cca1600-f5c0-4079-873e-b1de782946d3" alt=""><figcaption></figcaption></figure>

### 5. Select Other Business Activities and Small then click Next

<figure><img src="https://4000871720-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F3JeKot5J5CqiKNQnsgZV%2Fuploads%2Fk1DDVTIoFM0b8KYlCBPX%2FScreenshot%202024-05-22%20at%2011.16.20%E2%80%AFPM.png?alt=media&amp;token=88eb47f1-c62d-4023-b725-d3675f86eefc" alt=""><figcaption></figcaption></figure>

### 6. Select Examine User Behaviour then click Create

<figure><img src="https://4000871720-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F3JeKot5J5CqiKNQnsgZV%2Fuploads%2FN8lcXrfrwFY4m3R5o2ss%2FScreenshot%202024-05-22%20at%2011.17.38%E2%80%AFPM.png?alt=media&amp;token=913f94cb-4ddb-49a3-9cc3-804879c71cbc" alt=""><figcaption></figcaption></figure>

### 7. Accept the Terms and click next

<figure><img src="https://4000871720-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F3JeKot5J5CqiKNQnsgZV%2Fuploads%2FPSwkWGwYLVRJvhAhDpGY%2FScreenshot%202024-05-22%20at%2011.18.46%E2%80%AFPM.png?alt=media&amp;token=0ae59c13-ae10-41f0-812b-d8702d642379" alt=""><figcaption></figcaption></figure>

### 8. Select Web

<figure><img src="https://4000871720-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F3JeKot5J5CqiKNQnsgZV%2Fuploads%2F1oBU4Lw9yfRn2CNy8kwZ%2FScreenshot%202024-05-22%20at%2011.19.20%E2%80%AFPM.png?alt=media&amp;token=536dafc8-4e05-480f-962c-b415e2a24908" alt=""><figcaption></figcaption></figure>

### 9. Enter your website URL and enter the stream name, then click create stream

<figure><img src="https://4000871720-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F3JeKot5J5CqiKNQnsgZV%2Fuploads%2FJedOjApN3ZVSWypJv7XA%2FScreenshot%202024-05-22%20at%2011.20.13%E2%80%AFPM.png?alt=media&amp;token=b68b62f0-29cb-474c-84bb-3e84063c0a8e" alt=""><figcaption></figcaption></figure>

### 10. The installation instruction should pop-up automatically after approx 10-20 seconds, click on Install Manually and copy the Google tag

<figure><img src="https://4000871720-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F3JeKot5J5CqiKNQnsgZV%2Fuploads%2FMF0r8hHeiVNRVKDsoxom%2FScreenshot%202024-05-22%20at%2011.21.35%E2%80%AFPM.png?alt=media&amp;token=fe4bf4a8-6692-478e-b903-6bad1c5c5f3e" alt=""><figcaption></figcaption></figure>

### 11. Finally, you will need to place this Google tag in ALL your HTML/EJS pages in the \<head>

<figure><img src="https://4000871720-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F3JeKot5J5CqiKNQnsgZV%2Fuploads%2FsqtBoK03E3DkDJf9PjuR%2FScreenshot%202024-05-22%20at%2011.24.33%E2%80%AFPM.png?alt=media&amp;token=634d4115-6d27-4f16-8366-f37d99584965" alt=""><figcaption></figcaption></figure>

### 12. Remember to Commit and Push your changes to the repository once you are done!


# Learning Groups

<table data-view="cards"><thead><tr><th></th><th></th></tr></thead><tbody><tr><td><strong>Learning Group 1</strong></td><td><ul><li>Celine Leo Boon June</li><li>Nuramira Shadrina Binte Mohamad Nasir</li><li>Adelyn Wan</li><li>Aileen Chia</li><li>Charlie Cheong</li><li>Grace Ng</li><li>Ho Kok Hing</li></ul></td></tr><tr><td><strong>Learning Group 2</strong></td><td><ul><li>Cheryl Lim Yan Shan</li><li>Chew Min Yi Desiree</li><li>Terence Chia</li><li>Chen Jinglin</li><li>Muhammad Zahari Bin Abu Talib</li><li>Priyadarshini</li></ul></td></tr><tr><td><strong>Learning Group 3</strong></td><td><ul><li>Muhammad Azhar Bin Mohamed Shukor</li><li>Chew Yihao</li><li>Bernard Toh</li><li>Alamelu Subramaniam</li><li>Sonya Chan</li><li>Jolene Wong</li><li>Soh Zi Yan</li></ul></td></tr><tr><td><strong>Learning Group 4</strong></td><td><ul><li>Jolin Ong</li><li>Ng Kaijie</li><li>Poon Hong Yuen</li><li>Hong Mook Yong</li><li>Tracy Hung</li></ul></td></tr><tr><td><strong>Learning Group 5</strong></td><td><ul><li>Jonathan Siow</li><li>A Kanageswari</li><li>Gwenda Fong</li><li>Shikhar Kapoor</li><li>Narinderjit Kaur Gill</li><li>Chen Kaiwei</li><li>Patrick Pang</li></ul></td></tr><tr><td><strong>Learning Group 6</strong></td><td><ul><li>Ivan Tay</li><li>Jaslyn Lim</li><li>Scott Tan</li><li>Luisa Soon</li><li>Tan Jia Jia Jaye</li><li>Sim Feng-Ji</li></ul></td></tr><tr><td><strong>Learning Group 7</strong></td><td><ul><li>Fong Siow Ting</li><li>Jeanette Tan</li><li>Lim Sing Hui</li><li>Joy Sarang Ng Shan Ling</li><li>Goh Hanyan</li><li>Wong Kangwen</li><li>Yeo Jiong Han</li></ul></td></tr><tr><td><strong>Learning Group 8</strong></td><td><ul><li>Ng Huey Yan</li><li>Christine Chua</li><li>Vincent Low</li><li>Wilson Loke</li><li>Reuben Chan</li><li>Weng Wanyi</li></ul></td></tr><tr><td><strong>Learning Group 9</strong></td><td><ul><li>Lim Cher Maine</li><li>Ng Sok Hwai</li><li>Huang Tingting</li><li>Amanda Kee</li><li>Charmaine Tan</li><li>Lye Su Yin</li><li>Ng Si Jia (Racheal)</li></ul></td></tr><tr><td><strong>Learning Group 10</strong></td><td><ul><li>Tan Qi Zhi</li><li>Kimberly Tan</li><li>Oh Si Qi</li><li>Tan Ying Hui</li><li>Lee Chin Ser</li><li>Edmund Lee</li></ul></td></tr><tr><td><strong>Learning Group 11</strong></td><td><ul><li>Keith Lee</li><li>Jolyn Wu</li><li>Jasmine Ngo</li><li>Wang Jiun Haur</li><li>Tan Yuh Huann</li><li>Joanna Wong</li></ul></td></tr><tr><td><strong>Learning Group 12</strong></td><td><ul><li>Tong Yanting</li><li>Rachel Tay</li><li>Evelyn Tok</li><li>Lim Junjie</li><li>Vanessa Pang</li><li>Ang Yee Ling</li></ul></td></tr></tbody></table>


# Give Us Feedback

* [x] [Survey 1 (6 to 7 May)](https://form.gov.sg/660fc21be0184b35e6d101ea)
* [ ] [Survey 2 (8 May)](https://form.gov.sg/660fcde8164e7c4d430a51e1)
* [ ] [Survey 3 (9 to 10 May)](https://form.gov.sg/660fc9946c1dbece87726383)
* [ ] [Survey 4 (13 to 17 May)](https://form.gov.sg/660fd18e50cbb1bd73378d95)
* [ ] [Survey 5 (23 May)](https://form.gov.sg/6614aa4d1024f0ace977c874)
* [ ] [End of Programme Survey](https://form.gov.sg/6614bc8a1024f0ace97db25b)


# Programme Materials

{% tabs %}
{% tab title="Slide Decks" %}

#### Note: All materials produced for TechUp are owned by Smart Nation Group and Open Government Products. All content, including text, images, graphics, and other materials on this platform, are protected by copyright law. All rights are reserved.&#x20;

## Programme Introduction

* [Programme Introduction](https://www.canva.com/design/DAGD3E8hljM/LEzKJsoz2r-kTpOOLMzl1Q/edit?utm_content=DAGD3E8hljM\&utm_campaign=designshare\&utm_medium=link2\&utm_source=sharebutton) (6 May)
* [How the Internet Works](https://docs.google.com/presentation/d/1O3754vQuw6JevvcGn9_dwySP58RjIw39NI1N0EByDlY/edit?usp=sharing)
* [Administrative Briefing on Web App Presentations and Demo Day](https://docs.google.com/presentation/d/18fffslHkB1uyIu1ImXbebf9fjO2CcO3d8bdXMQ5BUi0/edit#slide=id.g4de465b1ea_0_34)

## Overviews

* [Web Development](https://docs.google.com/presentation/d/1rCiGcOqQjief6DYjyo-nopyaWq5CR5ryH6mURt1R8aY/edit?usp=drive_link)
* [Git, Github and Codespaces](https://docs.google.com/presentation/d/1lyLd1VGzrzGFwq4PpYr699c3i0IhC4FebSBfMCWkQSg/edit?usp=drive_link)
* [HTML](https://docs.google.com/presentation/d/1lX4sG9PpmFI0krJzUWo4_PUc6seXWAG-kEia30d2bnQ/edit?usp=drive_link)
* [CSS](https://docs.google.com/presentation/d/1SGU0c_D7UtgsknoXcqlBVIS5vfFl-lN6FGIdaXHS3Pc/edit?usp=drive_link)
* [Javascript](https://docs.google.com/presentation/d/1kbassHxOhAj5e9WMwOnMwJZYfE_VZvDiw8mmXSNv1Uo/edit?usp=drive_link)
* [Backend](https://docs.google.com/presentation/d/1-v8mg22MsVw2SSv9R_r3Sg-f8jok8zVTZJhZznlpzOk/edit?usp=drive_link)
* [Hands-on](https://docs.google.com/document/d/1IkXjJIt1kvHQeT9TE2YTTHTHHjey83e-PMDawtiaW_A/edit#heading=h.exexjc5smt3y)
* [How do I add a backend](https://docs.google.com/presentation/d/1TX7YQRKUvFtj-Qffdta6gu_2E6GGIZfmPjQpOA3DB8g/edit?usp=sharing)

## Design

* [Experimental Mindset](https://docs.google.com/presentation/d/1k36FVB403Ml6Dh3u1T-egI6Brs2ASWu616fZ8teET5U/edit?usp=drive_link)
* [Problem Statement Workshop](https://docs.google.com/presentation/d/1X4qJUZ89l3y8oBCMYtCen4U2NJmcG-pfXCxB6pzy9Gk/edit?usp=drive_link)
* [What is good design](https://docs.google.com/presentation/d/1x5WVSFFjsWYPC41jTPoAPTxMPS_1k9PE9C774jbLXuM/edit?usp=drive_link)
* [How to design prototypes](https://docs.google.com/presentation/d/1W13VPYOtyxyPzvdioJEjtj7NpXWyIv56X8UKLLxaq6I/edit?usp=sharing) - 7 May AM
* [How to test your prototype (Part I)](https://docs.google.com/presentation/d/1S8IR8_bx_piQD2ODKfJ7SI97jkZ2vtQ2owS9r_6ykcQ/edit?usp=drive_link) - 7 May PM
* [How to test your prototype (Part II) ](https://docs.google.com/presentation/d/1g2eSeUgnGkZAh2bwNcxmuS74DUHN8U0-2R3_VMZ4kcA/edit#slide=id.g2d14a94e128_0_627)

## Product

* [ProductUp](https://docs.google.com/presentation/d/1w20ZBRvz1tSg70leLDN8uJwpnZwfhI2nrCAMnttuFCs/edit?usp=sharing)
* [TechUp Remix: How to build a 11 star product](https://drive.google.com/file/d/1qjs0UnDl_vOuEyz9nUb-WMb0Jf6F7ttm/view?usp=sharing)
* [Mobile vs Web apps](https://docs.google.com/presentation/d/1bLYfIgAauc_vK0MCQ_PgH8EAArzrlH_hcFA-0BCwg8U/edit)

## Data Science

* [Google Analytics](https://docs.google.com/presentation/d/1Nu6qzipZkEMrg6vvXxxyKDLUBQYpJiVJihNfF72dtr4/edit?usp=drive_link)
* Product Metrics case studies<br>
  {% endtab %}
  {% endtabs %}


# Mandatory Reading on How the Internet Works

{% hint style="warning" %}
Please go through these materials before TechUp. These materials will be covered in the quiz on 14 May (30 MCQ, 70% score to pass TechUp).&#x20;
{% endhint %}

| <p><a href="https://www.youtube.com/watch?v=OAx_6-wdslM&#x26;list=PLzdnOPI1iJNcsRwJhvksEo1tJqjIqWbN-">Code.org YouTube playlist: How Computers Work</a></p><ol><li>Introducing how computers work </li><li>What makes a computer, a computer? </li><li>Binary & data</li><li>Circuits & logic </li><li>CPU, memory, input & output </li><li>Hardware and software </li></ol> | 25 min |
| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------ |
| <p><a href="https://www.youtube.com/watch?v=Dxcc6ycZ73M&#x26;list=PLzdnOPI1iJNfMRZm5DDxco3UdsFegvuB7">Code.org YouTube playlist: How the Internet Works</a> </p><ol><li>What is the Internet? </li><li>Wires, Cables & Wifi</li><li>IP Addresses & DNS</li><li>Packets, Routing & Reliability </li><li>HTTP & HTML </li><li>Encryption & Public Keys </li></ol>              | 45 min |
| [What happens when you type a URL in the browser and press enter?](https://medium.com/@maneesa/what-happens-when-you-type-an-url-in-the-browser-and-press-enter-bb0aa2449c1a) (Login to Medium required)                                                                                                                                                                     | 7 min  |


# Mandatory Course (Udemy)

[The Complete 2024 Web Development Bootcamp](https://learncsc.udemy.com/course/the-complete-web-development-bootcamp/learn/lecture/12638830#notes) (accessible on Udemy via LEARN app)

1. You are encouraged to go through this online course before the programme so that you can get a good sense of what is needed to build a web app during the programme.&#x20;
2. We have selected a few of the more important modules below that we recommend participants to focus on for essential foundation knowledge.&#x20;
3. As coding is a skill that takes consistent revision and practice to build, we strongly recommend officers to come in to TechUp having perused the topics (even if briefly) and bring any questions you have, so that TechUp can serve to reinforce key concepts and skills in web development.

{% hint style="info" %}
Those indicated in❗️**bold are mandatory for TechUp**.&#x20;
{% endhint %}

{% tabs %}
{% tab title="❗️Front-End + HTML" %}

<table><thead><tr><th width="231">Title</th><th width="190">Udemy Link</th><th width="150"># of Lectures</th><th>Duration</th></tr></thead><tbody><tr><td>❗️<strong>Front End Web Development</strong></td><td><a href="https://learncsc.udemy.com/course/the-complete-web-development-bootcamp/learn/lecture/12638830#overview">Udemy Section 1</a></td><td>9</td><td>37 min</td></tr><tr><td>❗️<strong>Introduction to HTML</strong></td><td><a href="https://learncsc.udemy.com/course/the-complete-web-development-bootcamp/learn/lecture/37390282#overview">Udemy Section 2</a></td><td>8</td><td>51 min</td></tr><tr><td>❗️<strong>Intermediate HTML</strong></td><td><a href="https://learncsc.udemy.com/course/the-complete-web-development-bootcamp/learn/lecture/37349778#overview">Udemy Section 3</a></td><td>7</td><td>51 min</td></tr><tr><td>❗️<strong>Multi-Page Websites</strong></td><td><a href="https://learncsc.udemy.com/course/the-complete-web-development-bootcamp/learn/lecture/37349942#overview">Udemy Section 4</a></td><td>7</td><td>1 hr 10 min</td></tr></tbody></table>
{% endtab %}

{% tab title="❗️CSS" %}

<table><thead><tr><th width="296">Title</th><th width="159">Udemy Link</th><th width="124"># of Lectures</th><th>Duration</th></tr></thead><tbody><tr><td>❗️<strong>Introduction to CSS</strong></td><td><a href="https://learncsc.udemy.com/course/the-complete-web-development-bootcamp/learn/lecture/37350296#overview">Udemy Section 5</a></td><td>6</td><td>59 min</td></tr><tr><td>❗️<strong>Intermediate to CSS</strong></td><td><a href="https://learncsc.udemy.com/course/the-complete-web-development-bootcamp/learn/lecture/37350528#overview">Udemy Section 7</a></td><td>5</td><td>1 hr 33 min</td></tr><tr><td><p><a data-footnote-ref href="#user-content-fn-1">Bootstrap</a></p><p>Helps you with nice default HTML elements like buttons and nav bar</p></td><td><a href="https://learncsc.udemy.com/course/the-complete-web-development-bootcamp/learn/lecture/37368626#notes">Udemy Section 11</a></td><td>4</td><td>1 hr 40 min</td></tr><tr><td><p><a data-footnote-ref href="#user-content-fn-2">Capstone Project 2 - Personal site</a></p><p>By the end of the course, if you have done the capstone projects, you will have a personal repository of projects to showcase on GitHub.</p></td><td><a href="https://learncsc.udemy.com/course/the-complete-web-development-bootcamp/learn/lecture/37331054#overview">Udemy Section 13</a></td><td>1</td><td>Around 1 hour for assignment</td></tr></tbody></table>
{% endtab %}

{% tab title="❗️Javascript, DOM" %}

<table><thead><tr><th width="259">Title</th><th width="168">Udemy Link</th><th width="139"># of Lectures</th><th>Duration</th></tr></thead><tbody><tr><td>❗️<strong>Introduction to Javascript ES6</strong></td><td><a href="https://learncsc.udemy.com/course/the-complete-web-development-bootcamp/learn/lecture/12371320#overview">Udemy Section 14</a></td><td>28</td><td>2 hr 28 min</td></tr><tr><td>❗️<strong>Intermediate Javascript</strong></td><td><a href="https://learncsc.udemy.com/course/the-complete-web-development-bootcamp/learn/lecture/12373892#overview">Udemy Section 15</a></td><td>19</td><td>1 hr 30 min</td></tr><tr><td>❗️<strong>The Document Object Model (DOM)</strong></td><td><a href="https://learncsc.udemy.com/course/the-complete-web-development-bootcamp/learn/lecture/12374106#overview">Udemy Section 16</a></td><td>9</td><td>56 min</td></tr><tr><td><a data-footnote-ref href="#user-content-fn-3">Boss Level Challenge 1 - The Dicee Game</a></td><td><a href="https://learncsc.udemy.com/course/the-complete-web-development-bootcamp/learn/lecture/12383900#overview">Udemy Section 17</a></td><td>11</td><td>20 min (1-2 hours for assignment)</td></tr><tr><td>❗️<strong>The Unix Command Line</strong> </td><td><a href="https://learncsc.udemy.com/course/the-complete-web-development-bootcamp/learn/lecture/12371166#overview">Udemy Section 21</a></td><td>5</td><td>30 min</td></tr></tbody></table>
{% endtab %}

{% tab title="❗️Git, GA" %}

<table><thead><tr><th width="231">Title</th><th width="188">Udemy Link</th><th># of Lectures</th><th>Duration</th></tr></thead><tbody><tr><td>❗️<strong>Git, GitHub and Version Control</strong></td><td><a href="https://learncsc.udemy.com/course/the-complete-web-development-bootcamp/learn/lecture/12386072#overview">Udemy Section 27</a></td><td>9</td><td>1 hr 17 min</td></tr><tr><td>❗️<a data-footnote-ref href="#user-content-fn-4"><strong>How to set up Google Analytics</strong></a> <strong>(GA)</strong></td><td><a href="https://www.youtube.com/watch?v=f3X-hYRxBL8">YouTube tutorial</a></td><td>-</td><td>6 min</td></tr></tbody></table>
{% endtab %}
{% endtabs %}

We highly recommend completing the additional courses below to have an understanding on full stack web development.

{% tabs %}
{% tab title="Backend" %}

<table><thead><tr><th width="252">Title</th><th width="174">Udemy Link</th><th width="138"># of Lectures</th><th>Duration</th></tr></thead><tbody><tr><td>Backend Web Development</td><td><a href="https://learncsc.udemy.com/course/the-complete-web-development-bootcamp/learn/lecture/12407820#overview">Udemy Section 22</a></td><td>2</td><td>21 min</td></tr><tr><td>Node.js</td><td><a href="https://learncsc.udemy.com/course/the-complete-web-development-bootcamp/learn/lecture/12384268#overview">Udemy Section 23</a></td><td>8</td><td>1 hr 6 min</td></tr><tr><td>Express.js with Node.js</td><td><a href="https://learncsc.udemy.com/course/the-complete-web-development-bootcamp/learn/lecture/12384462#overview">Udemy Section 24</a></td><td>8</td><td>2 hr 1 min</td></tr><tr><td>EJS (Embedded JavaScript)</td><td><a href="https://learncsc.udemy.com/course/the-complete-web-development-bootcamp/learn/lecture/38911782#overview">Udemy Section 25</a></td><td>6</td><td>1 hr 30 min</td></tr></tbody></table>
{% endtab %}

{% tab title="APIs" %}

<table><thead><tr><th width="225">Title</th><th width="189">Udemy Link</th><th># of Lectures</th><th>Duration</th></tr></thead><tbody><tr><td>APIs (Application Programming Interface)</td><td><a href="https://learncsc.udemy.com/course/the-complete-web-development-bootcamp/learn/lecture/38912006#overview">Udemy Section 28</a></td><td>8</td><td>2 hr 28 min</td></tr></tbody></table>

{% endtab %}

{% tab title="Databases (SQL + PostgreSQL)" %}

<table><thead><tr><th width="230">Title</th><th width="196">Udemy Link</th><th># of Lectures</th><th>Duration</th></tr></thead><tbody><tr><td>Databases </td><td><a href="https://learncsc.udemy.com/course/the-complete-web-development-bootcamp/learn/lecture/40494138#overview">Udemy Section 31</a></td><td>2</td><td>22 min</td></tr><tr><td>SQL  </td><td><a href="https://learncsc.udemy.com/course/the-complete-web-development-bootcamp/learn/lecture/12385674#overview">Udemy Section 32</a></td><td>6</td><td>36 min</td></tr><tr><td>PostgreSQL </td><td><a href="https://learncsc.udemy.com/course/the-complete-web-development-bootcamp/learn/lecture/40494144#overview">Udemy Section 33</a></td><td>16</td><td>4 hr 11 min</td></tr></tbody></table>
{% endtab %}
{% endtabs %}

[^1]: optional but useful

[^2]: optional but it will help you experiment with your first website

    (E.g. Steph’s first ever [website](https://stephsiow.github.io/cv/))

[^3]: optional but fun and useful for practice

[^4]: this will be used to analyse your webapp’s metrics e.g. user traffic


# Sample Web App

*This is the same sample web app deployed on* [*https://sample.techup.live*](https://sample.techup.live)

{% hint style="info" %}
**In this exercise, we will teach you how to:**&#x20;

1. Create a GitHub repository to store your sample code (in Git files)
2. Upload ("commit and push") your HTML + CSS + JS code to GitHub
3. Connect a sample website to a database on Postgres

**This exercise is meant to simulate how you would deploy your live website onto the Internet.**&#x20;
{% endhint %}

## Web technologies powering the Sample Web App

The Sample Web App is hosted on Render.com, a cloud-based application hosting platform with the following components:

* **Frontend:** HTML, CSS and Javascript
* **Backend:** NodeJS, Express, EJS
* **Database:** Postgres

<figure><img src="https://4000871720-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F3JeKot5J5CqiKNQnsgZV%2Fuploads%2FibNvDLD3PiGgh30g3cPs%2FScreenshot%202024-04-21%20at%207.53.10%E2%80%AFPM.png?alt=media&amp;token=bf135402-de6a-46a9-82c6-65f92abadaa5" alt=""><figcaption><p>Extremely simple System architecture of Sample Web App</p></figcaption></figure>

## Sign in to GitHub and Render

You will need to be signed in to GitHub and Render.com before you setup the Sample Web Application. For instructions on how to sign up for a GitHub and Render account respectively, please refer to the following pages.

{% hint style="info" %}
**Note:** You will need to create a GitHub account first before creating a Render account. You will be using the "Sign up with GitHub" option when creating an account on Render.
{% endhint %}

{% content-ref url="/pages/Kxgr76GLETL2u9JYCsPm" %}
[GitHub](/admin-instructions/tooling-and-software/github)
{% endcontent-ref %}

{% content-ref url="/pages/O6j8XYlpghO7vu47M4Lo" %}
[Render](/admin-instructions/tooling-and-software/render)
{% endcontent-ref %}

## Instructions on setting up your sample web app

{% hint style="info" %}
If you prefer to watch a video of this setup you may watch it [here](https://drive.google.com/file/d/18UTrfh8eo3emeDxEZ32Kig6N2qdvDi-c/view?usp=sharing) instead.
{% endhint %}

### 1. Create a new GitHub Repository

* Go to <https://github.com/new> to create a new repository
* Type in your own repository name (this could be any name)
* The description for your repository can be empty
* Your repository should by default be Public
* Ensure that you check the "**Add a README file**"
* Ensure that you select **Node** as the .gitignore template
* The license can be at it's default setting of None
* Note that your default branch may be called "master" or "main", this is okay and you can leave it (mine is currently set as "develop").
* Click on "Create repository" to create your new GitHub Repository

<figure><img src="https://4000871720-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F3JeKot5J5CqiKNQnsgZV%2Fuploads%2F8LWt3cGDOy78ANQO8DxP%2FScreenshot%202024-04-02%20at%207.13.05%E2%80%AFPM.png?alt=media&amp;token=bfffcb3b-2bdc-40f0-b429-7320f64c15aa" alt=""><figcaption><p>A sample of the options selected before clicking "Create repository"</p></figcaption></figure>

### 2. Open your newly created repository in Codespaces

* You should have been re-directed to your newly created repository
* Click on the green "Code" button, select the "Codespaces" tab and click **"Create Codespace on develop"**. (Note: your branch may be called "master" or "main" and this is fine)

<figure><img src="https://4000871720-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F3JeKot5J5CqiKNQnsgZV%2Fuploads%2FwY3VnFBHnDJmEEcPPd9n%2FScreenshot%202024-04-02%20at%207.25.55%E2%80%AFPM.png?alt=media&amp;token=81909808-efdf-470d-9130-21d56e0c1017" alt=""><figcaption><p>Click on create codespace to open up codespaces for your repository</p></figcaption></figure>

### 3. Download the source code and unzip the file

* Your GitHub Codespace should have opened up in a new tab after creating a codespace in the previous step.

### Click on the link below to download the source code for the sample app here and unzip the file:&#x20;

{% file src="/files/yMGenNBkeNuBol9lAHtS" %}

<figure><img src="https://4000871720-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F3JeKot5J5CqiKNQnsgZV%2Fuploads%2FMusLTMaF6SXVYGA2yP0Y%2FScreenshot%202024-04-02%20at%207.36.57%E2%80%AFPM.png?alt=media&amp;token=f526a906-b61d-429c-9fb1-bbc7aec3210e" alt=""><figcaption><p>You should see the following files and folders after unzipping the zip file  </p></figcaption></figure>

### 4. Drag and drop sample app code into Codespaces

* After completing Step 2, a new tab should have opened with your Codespace similar to the image shown below.

<figure><img src="https://4000871720-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F3JeKot5J5CqiKNQnsgZV%2Fuploads%2FuwFb3a8IQRDRdYWxwXa3%2FScreenshot%202024-04-02%20at%207.39.37%E2%80%AFPM.png?alt=media&amp;token=5246f71b-106f-4932-bf5e-3185efa4484e" alt=""><figcaption><p>Your Codespace for your newly created GitHub repository</p></figcaption></figure>

* Drag and drop all files and folders in Step 3 into the sidebar of your Codespace. IMPORTANT: Ensure that you select all the files and folders INSIDE the unzipped file, do not upload the whole zip file (see the below images if you are unsure).

<figure><img src="https://4000871720-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F3JeKot5J5CqiKNQnsgZV%2Fuploads%2FTW03d72ZrmcIDPNV3KJK%2FAnnotated%20Screenshot%202024-04-02%20at%207.36.57%E2%80%AFPM.png?alt=media&amp;token=4f9f82c1-9942-42e7-93a2-a738bfa2ad12" alt=""><figcaption><p>Select all the files and folders INSIDE the unzipped file to upload to Codespace</p></figcaption></figure>

<figure><img src="https://4000871720-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F3JeKot5J5CqiKNQnsgZV%2Fuploads%2Fe0iYMGa00Rnv4V1i8KnK%2FAnnotated%20Screenshot%202024-04-02%20at%207.39.37%E2%80%AFPM.png?alt=media&amp;token=2c0c0f1c-53f6-4465-9c92-ba90c93ecb71" alt=""><figcaption><p>Drop the selected folders and files in the section marked by the red box</p></figcaption></figure>

<figure><img src="https://4000871720-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F3JeKot5J5CqiKNQnsgZV%2Fuploads%2Fg8LS2fmQWHZKYeJI8of7%2F0b1aaa01-4d38-43c7-be41-3c52eb00f67e.gif?alt=media&amp;token=cce2ceb8-beaf-49f7-8775-4dbb37018611" alt=""><figcaption><p>Ensure you drag and drop the correct files in the right location</p></figcaption></figure>

* This uploads the sample web app source code to your Codespace
* After dragging and dropping, your Codespace should look like this with the following files in the sidebar

<figure><img src="https://4000871720-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F3JeKot5J5CqiKNQnsgZV%2Fuploads%2FdIsVcVLec1p6egrwz9PM%2FScreenshot%202024-04-02%20at%207.42.28%E2%80%AFPM.png?alt=media&amp;token=fe34d8b1-b0c1-4768-83d9-490f725881ce" alt=""><figcaption><p>Note the newly added folders of "prisma", "public", "views" and files "package-lock.json", "package.json", "server.js"</p></figcaption></figure>

### 5. Commit & Push to your repository

* Click on the Source Control icon (the icon which has blue numbers on it, in the image above it's the third tab on the left)
* Enter a commit message of "Uploaded sample code"
* Click on the dropdown next to "Commit" and click on "Commit & Push".
* Note that you will have to click on the drop down arrow for "Commit & Push" to show up

<figure><img src="https://4000871720-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F3JeKot5J5CqiKNQnsgZV%2Fuploads%2Fm3JS0he3FQQs12UlMNiW%2FScreenshot%202024-04-02%20at%208.00.42%E2%80%AFPM.png?alt=media&amp;token=3fca2d72-ad45-4940-865a-22091fe0dee2" alt=""><figcaption><p>Click on the Source Control tab, write a commit message and click on "Commit &#x26; Push" from the drop down list</p></figcaption></figure>

* If the following pop-up appears, select "Always"

<figure><img src="https://4000871720-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F3JeKot5J5CqiKNQnsgZV%2Fuploads%2F7efl5L802iwo4eRROmXG%2FScreenshot%202024-04-02%20at%208.03.59%E2%80%AFPM.png?alt=media&amp;token=53948823-4fae-496c-9692-039fb1e0f375" alt=""><figcaption><p>Select "Always" should this pop-up appear after clicking "Commit &#x26; Push"</p></figcaption></figure>

* Another pop up may appear at the bottom right of your screen, select the option of  "Yes"

<figure><img src="https://4000871720-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F3JeKot5J5CqiKNQnsgZV%2Fuploads%2FFjTEj4e5yHUFjLwS3qzj%2FScreenshot%202024-04-02%20at%208.04.11%E2%80%AFPM.png?alt=media&amp;token=8270c77b-9954-41ae-8850-a84a2a7881be" alt=""><figcaption><p>Select "Yes" should this pop-up appear on the bottom right of your screen</p></figcaption></figure>

* Check that your files are in your GitHub repository by going to <https://github.com> and selecting the repository you created in Step 1

<figure><img src="https://4000871720-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F3JeKot5J5CqiKNQnsgZV%2Fuploads%2FYKx8WLqt8HHJaV2iKQXF%2FScreenshot%202024-04-21%20at%207.37.47%E2%80%AFPM.png?alt=media&amp;token=15183ee8-94b5-445e-a24c-52b32df58347" alt=""><figcaption><p>Select your repository in the sidebar on the left</p></figcaption></figure>

* You should now see that there are the newly uploaded files in this repository

<figure><img src="https://4000871720-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F3JeKot5J5CqiKNQnsgZV%2Fuploads%2FkbrWLMi1xW1nyGZMNfAc%2FScreenshot%202024-04-21%20at%207.41.39%E2%80%AFPM.png?alt=media&amp;token=6af84110-8526-4a68-883c-f07358e9aeb3" alt=""><figcaption><p>The files should now be in your repository you created</p></figcaption></figure>

### 6. Create a new PostgreSQL database on Render

* Go to <https://dashboard.render.com/new/database> to create a new PostgreSQL database on Render.
* Type in a Name for your PostgreSQL instance (I've named mine techup-sample-database)
* Leave the Database field blank
* Leave the User field blank
* Change the Region to "Singapore (Southeast Asia)
* Leave PostgreSQL Version as the default value of 16
* Leave the Datadog API Key field blank
* Change your instance type to FREE
* Click on "Create Database"

<figure><img src="https://4000871720-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F3JeKot5J5CqiKNQnsgZV%2Fuploads%2FNC5dkGr5KJhNWpLEzrvX%2FScreenshot%202024-04-02%20at%208.16.22%E2%80%AFPM.png?alt=media&amp;token=c5345357-28ff-4a2e-95d0-5c58cb9f0557" alt=""><figcaption><p>Enter a Name for your instance and change the Region to Singapore while leaving other fields as their default values</p></figcaption></figure>

<figure><img src="https://4000871720-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F3JeKot5J5CqiKNQnsgZV%2Fuploads%2FXcXTjQpT3VvTmJq2jLku%2FScreenshot%202024-04-02%20at%208.16.26%E2%80%AFPM.png?alt=media&amp;token=9f2d739f-6041-4bf0-b23f-3c3f1fd933d1" alt=""><figcaption><p>Change your Instance Type to FREE before clicking on Create Database</p></figcaption></figure>

* Your database should now be created (after about 30 seconds)
* Scroll down to the section on Connections and take note of the `External Database URL`
* Copy this `External Database URL` to a blank word document (or anywhere else such as Notepad) as you will be using it later to add it as an environment variable.
* <mark style="background-color:red;">**IMPORTANT: PLS ENSURE YOU HAVE COPIED THIS URL AS YOU NEED IT LATER.**</mark>

<figure><img src="https://4000871720-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F3JeKot5J5CqiKNQnsgZV%2Fuploads%2Fae3RuJBJes17DBR9Efr6%2FScreenshot%202024-04-02%20at%208.20.52%E2%80%AFPM.png?alt=media&amp;token=83cce57a-2660-410e-8cac-e3f78ba2ae93" alt=""><figcaption><p>Click on "Copy to clipboard" for the External Database URL to copy this URL for use later</p></figcaption></figure>

### 7. Create a new Web Service on Render

* Go to <https://dashboard.render.com/create?type=web> to create a new Web Service (alternatively you may also click on the purple New + button at the top of the page and select Web Service)
* Ensure "Build and deploy from a Git repository" is selected then click Next

<figure><img src="https://4000871720-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F3JeKot5J5CqiKNQnsgZV%2Fuploads%2FY4bkU3e2kVlEonk4r5BW%2FScreenshot%202024-04-02%20at%208.24.19%E2%80%AFPM.png?alt=media&amp;token=bee62f78-0b67-4c23-93df-4645453a2052" alt=""><figcaption><p>Ensure the first option of "Build and deploy from a Git repository" is selected</p></figcaption></figure>

* On the right column you will need to click on "+ Connect Account" to connect your GitHub account to Render.
* Click on "Connect" for the repository name which your created in Step 1

<figure><img src="https://4000871720-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F3JeKot5J5CqiKNQnsgZV%2Fuploads%2FJERevu5IoEkzbbUXHAqO%2FScreenshot%202024-04-02%20at%208.26.12%E2%80%AFPM.png?alt=media&amp;token=56c6ad36-e1cd-49f5-8e24-c932688db6a9" alt=""><figcaption><p>Click Connect on the repository created in Step 1 (if this dropdown list is not showing you will need to click on + Connect Account on the page to connect your GitHub account to Render)</p></figcaption></figure>

* Leave the Name field as it's default value
* Ensure that the Region is set to "Singapore (Southeast Asia)"
* Ensure that your Branch is selected (yours may be called "master" or "main")
* Leave the Root Directory field blank
* Leave the Runtime as "Node"
* Change the Build Command to `yarn; npx prisma db push; npx prisma generate`&#x20;

<figure><img src="https://4000871720-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F3JeKot5J5CqiKNQnsgZV%2Fuploads%2FwzQCipXg56Vm90sJdGsq%2FScreenshot%202024-04-02%20at%208.35.12%E2%80%AFPM.png?alt=media&amp;token=bf0580a6-bcc3-40ab-a4eb-1a9dad2cf096" alt=""><figcaption><p>Change the Build Command to as shown above</p></figcaption></figure>

* Add the Start Command of `node server.js`&#x20;
* Change the Instance Type to FREE

<figure><img src="https://4000871720-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F3JeKot5J5CqiKNQnsgZV%2Fuploads%2FasWTprs2E4LoYiaGbTrs%2FScreenshot%202024-04-02%20at%208.39.36%E2%80%AFPM.png?alt=media&amp;token=2ee2fed9-4964-4068-9dc1-c4bc1b2a7c43" alt=""><figcaption><p>Add the Start Command to "node server.js" and change the Instance Type to FREE</p></figcaption></figure>

* Add a new Environment Variable of name `DATABASE_URL` with the value of your copied `External Database URL` in Step 6. *(If you have misplaced this URL, not to worry. Go to* [*https://dashboard.render.com/*](https://dashboard.render.com/) *and click on your database. Scroll down and simply copy the External Database URL again.)*

<figure><img src="https://4000871720-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F3JeKot5J5CqiKNQnsgZV%2Fuploads%2FDdSEuoGLSS50uZvgbJQV%2FScreenshot%202024-04-02%20at%208.42.26%E2%80%AFPM.png?alt=media&amp;token=b295b7ad-1d79-475f-b088-90ccfe941d73" alt=""><figcaption><p>Create a new Environment Variable of "DATABASE_URL" and paste the External Database URL copied earlier as its value</p></figcaption></figure>

* Click on the "Create Web Service" button to start deploying
* You will be redirected to a new page which shows the logs of the server build happening. It would take approximately 2-4mins for the the server to full deploy your app.
* Your app is deployed once you see the line "==> Your service is live 🎉" in the logs.

<figure><img src="https://4000871720-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F3JeKot5J5CqiKNQnsgZV%2Fuploads%2FGjikxRJ8YNqtvFZGcUBf%2FScreenshot%202024-04-02%20at%208.45.35%E2%80%AFPM.png?alt=media&amp;token=8c43f07a-9996-4d6b-8aea-0d8ee270c93d" alt=""><figcaption><p>Your app is ready once you see "Your service is live 🎉"</p></figcaption></figure>

### 8. Accessing your newly deployed web application

* At the top of the same deploy page with the logs, you will see a URL (in my case it is <https://techup-blog.onrender.com>). Click on this link and it will bring you to your web application.

<figure><img src="https://4000871720-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F3JeKot5J5CqiKNQnsgZV%2Fuploads%2FVrRvaLwE0qyL6Y0KFuRw%2FScreenshot%202024-04-02%20at%208.49.14%E2%80%AFPM.png?alt=media&amp;token=06865914-bbf4-4f77-bf5f-7b05fe80edea" alt=""><figcaption><p>Click on the URL at the top left to bring you to your newly deployed web app</p></figcaption></figure>

* You should now be able to view the sample web app which you have deployed on your own Render server!

<figure><img src="https://4000871720-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F3JeKot5J5CqiKNQnsgZV%2Fuploads%2FVfZvkVjfnnENXLXGuYjR%2FScreenshot%202024-04-02%20at%208.51.29%E2%80%AFPM.png?alt=media&amp;token=c93ec5c1-09f6-4a1c-b39a-bfc1c7c52b26" alt=""><figcaption><p>Congrats!! You have successfully deployed the sample web app on your own Render server</p></figcaption></figure>

* Have fun playing around with the sample web app by Adding and Deleting blog posts!

## Optional: How do I view what is inside my Postgres database which I created on Render.com?

### 1. Download and install TablePlus from <https://tableplus.com/>

<figure><img src="https://4000871720-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F3JeKot5J5CqiKNQnsgZV%2Fuploads%2Faf7nyrPU2fXTpuporfeu%2FScreenshot%202024-04-21%20at%208.41.42%E2%80%AFPM.png?alt=media&amp;token=f1c8ba51-02a4-474c-b483-77a9235269e7" alt=""><figcaption><p>Dowload TablePlus for Mac or TablePlus for Windows depedning on what laptop you have</p></figcaption></figure>

### 2. Open TablePlus and click on the + icon to add a new connection

<figure><img src="https://4000871720-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F3JeKot5J5CqiKNQnsgZV%2Fuploads%2FgnncFnNmRmEjaCkOLgy0%2FScreenshot%202024-04-21%20at%208.41.26%E2%80%AFPM.png?alt=media&amp;token=4fbca980-e7a1-406c-b73f-e6a9d84d5441" alt=""><figcaption><p>Click on the + icon to add a new connection</p></figcaption></figure>

### 3. Click on Import from URL

<figure><img src="https://4000871720-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F3JeKot5J5CqiKNQnsgZV%2Fuploads%2FYGNjWh6qYLtHtxFSwtVs%2FScreenshot%202024-04-21%20at%208.53.38%E2%80%AFPM.png?alt=media&amp;token=5463c166-7fe8-47a9-99f2-753950c251c7" alt=""><figcaption><p>Click on Import from URL</p></figcaption></figure>

### 4. Paste the `External Database URL` (which you copied earlier when setting up Postgres) into the text field then click Import

<figure><img src="https://4000871720-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F3JeKot5J5CqiKNQnsgZV%2Fuploads%2FyKOmDKL0QidkZeLedt5F%2FScreenshot%202024-04-21%20at%209.25.10%E2%80%AFPM.png?alt=media&amp;token=dbe7baa5-1693-4222-810e-b64d47a84d8b" alt=""><figcaption><p>Paste your External URL into the field then click Import</p></figcaption></figure>

### 5. Click on Connect (you may rename the "Name" field or leave it as it's default)

<figure><img src="https://4000871720-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F3JeKot5J5CqiKNQnsgZV%2Fuploads%2FbxuqkzR9FsFr61B9hf77%2FScreenshot%202024-04-21%20at%209.28.13%E2%80%AFPM.png?alt=media&amp;token=8a251981-70b9-45f5-959e-8372c2e0034d" alt=""><figcaption><p>Click on connect</p></figcaption></figure>

### 6. You have now successfully connected to the database from TablePlus and you may click on the Post table in the left sidebar to view the contents

<figure><img src="https://4000871720-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F3JeKot5J5CqiKNQnsgZV%2Fuploads%2FwbgoWTkifV4BtSwe2aLK%2FScreenshot%202024-04-21%20at%209.31.57%E2%80%AFPM.png?alt=media&amp;token=f33b99c5-667a-412b-93f6-c0895efd0267" alt=""><figcaption><p>Success! You can click on the Post table to view the contents</p></figcaption></figure>


# Frequently Asked Questions

Have a question not on this list? Leave a comment and we will get it answered!

## Attendance

* **I cannot attend the programme on some days. What should I do?**\
  Get approval in writing from your Director and inform the TechUp organising team.&#x20;
* **I have urgent work I need to clear during the programme.**\
  Please write to DS and your Director, and copy HCD, Ruimin and Yunxi. If you appear to be doing work during the programme without prior clearance/approval, DS and your Director will be notified.

## Others

* **Who should I approach if I need help?**\
  You can try these methods here for self-help or peer-help first. If all else fails, depending on the domain of your question, please approach the organising team and/or volunteers.&#x20;

## Problem Statement

* **What if I don’t have a problem statement?**

  There are plenty of problems to solve! 🙂 Just look around and see what is bothering you or someone around you in your daily lives. A simple guide to start crafting a problem statement can be found [here](https://www.build.gov.sg/problem-statement-guide/).
* **Can I change my problem statement halfway?**

  Yes, as long as you are able to build your solution in time for the web app presentation on 27 and 28 May.
* **Does my web app need to solve a problem? What kind of problem?**

  Yes, the deliverable for TechUp is to build your own web app that solves a problem of your choice. The web app you build should meet the requirements below:

{% hint style="success" %}

1. Articulate a user problem
2. Use CSS to design and style page
3. Interactivity with Javascript
4. Intuitive UX flow
5. Reading and writing into a database (optional)
   {% endhint %}

* **How can I find inspiration on what type of webapp to build?**

  You may find inspiration on the webapps built by our previous run of TechUp participants [here](https://techup.live/).&#x20;

  Alternatively, you can follow the step-by-step tutorials below for additional practice:

<table data-view="cards"><thead><tr><th></th><th></th><th></th></tr></thead><tbody><tr><td><p><strong>Making a To-do List with EJS:</strong> </p><p><a href="https://appbrewery.com/courses/legacy-complete-web-development-course/lectures/46570380">App Brewery Section 22</a></p></td><td></td><td></td></tr><tr><td><strong>Sample Web app tutorials:</strong> <a href="https://www.youtube.com/watch?v=G0jO8kUrg-I&#x26;t=1398s">To-do list</a> and <a href="https://www.youtube.com/watch?v=PBcqGxrr9g8">Quiz app</a></td><td></td><td></td></tr></tbody></table>

***

## Technical

### Overview on Web Development

* **What is a static vs dynamic website?**

<table><thead><tr><th width="142"></th><th>Static Website</th><th>Dynamic Website</th></tr></thead><tbody><tr><td>Definition</td><td>A static website displays the same content to all visitors in the same format. It is made up of a fixed number of pre-built files stored on a web server, and content won’t change unless the HTML source code is edited.</td><td>A dynamic website presents different information to different visitors (depending on their location, local time &#x26; preferences), making for a more tailored and interactive experience.</td></tr><tr><td>Scripting Language</td><td>Files are written in HTML, CSS, and JavaScript, which are called “client-side” languages because they execute in the user’s web browser.</td><td>To build pages on the back end, dynamic websites employ “server-side” languages like PHP, Python, Ruby, &#x26; JavaScript, in addition to “client-side” languages.</td></tr><tr><td>Database</td><td>Does not interact with a database.</td><td>May interact with databases to store and retrieve dynamic content.</td></tr><tr><td>Examples</td><td>Brochure websites, personal blogs, portfolio sites, school websites (e.g. <a href="https://www.nanhuapri.moe.edu.sg/">https://www.nanhuapri.moe.edu.sg/</a>) </td><td>Facebook, Netflix, Twitter, Youtube, Gmail</td></tr><tr><td>Use case</td><td>Static websites work best for sites with fewer pages that don’t require frequent updates or changes. (E.g company webpages)</td><td>Dynamic websites are those which are content heavy and user-driven. (E.g. real estate listing websites)</td></tr></tbody></table>

{% hint style="info" %}
Read more here:

<https://blog.hubspot.com/website/static-vs-dynamic-website>

<https://www.wix.com/blog/static-vs-dynamic-website>
{% endhint %}

* **What is the difference between a website vs a web app?**

<table><thead><tr><th width="132"></th><th>Website</th><th>Web Application</th></tr></thead><tbody><tr><td>Function</td><td>Websites serve to inform users. The content on a website can be viewed, read, or listened to, but the user cannot manipulate it.</td><td>Web apps serve to help users. The content on web apps is not only viewable but allows users to manipulate data. Anything on the Internet that performs a service is likely a web app.</td></tr><tr><td>Complexity</td><td>Websites are just a collection of static web pages.</td><td>While web apps can be built with the same web technologies as websites (JavaScript, HTML, and CSS), apps will also need to use more advanced programming languages (like PHP, frameworks, and server-side scripts). Additionally, UX/UI design is more crucial to web applications since users actively interact with them.</td></tr><tr><td>Access</td><td>Public access is a hallmark of websites.</td><td>Web apps frequently require user authentication because they provide services customised to the user’s requirements.</td></tr><tr><td>Use case</td><td>If you want users to get to know your business and the products or services you offer, a website is probably the best choice for you.</td><td>If you want to provide a service to users, you will want to develop a web application.</td></tr></tbody></table>

{% hint style="info" %}
Read more here:

<https://www.koombea.com/blog/website-vs-web-application/>
{% endhint %}

* **What are the common frameworks used in tech companies? Do they actually use HTML, CSS, JS, Node.js?**

  HTML, CSS, JavaScript are foundational technologies that are still widely used. HTML for structuring web content, CSS for styling, and JavaScript for adding interactivity and dynamic behavior to web pages. Below are some common frameworks:

<details>

<summary>Frontend Frameworks</summary>

* React.js: Developed by Facebook, it's widely used for building user interfaces, particularly for single-page applications.
* Angular: Developed and maintained by Google, Angular is a comprehensive framework for building web applications.
* Vue.js: Known for its simplicity and ease of integration, Vue.js is increasingly popular for building interactive web interfaces.

</details>

<details>

<summary>Backend Frameworks</summary>

* Node.js: Though not exactly a framework, Node.js is a runtime environment that allows you to run JavaScript on the server-side. Many frameworks are built on top of it, such as Express.js.
* Express.js: A minimal and flexible Node.js web application framework, often used for building APIs and web servers.
* Django: Written in Python, Django is a high-level web framework that encourages rapid development and clean, pragmatic design.

</details>

<details>

<summary>Database Frameworks</summary>

* MongoDB: A NoSQL database, often used with Node.js and Express.js for full-stack JavaScript applications.
* MySQL/PostgreSQL: Relational databases that are commonly used in conjunction with various backend frameworks.

</details>

<details>

<summary>Mobile Development</summary>

* React Native: A framework for building mobile applications using React, allowing developers to write code once and deploy it on both iOS and Android platforms.
* Flutter: Developed by Google, Flutter is a UI toolkit for building natively compiled applications for mobile, web, and desktop from a single codebase.

</details>

### Getting Started

* **What is the Terminal / Command line?**

  The terminal is a software application that provides access to the command line interface. It's a graphical application that emulates a text-based terminal.&#x20;

  The command line is the literal line where you enter commands and the cursor blinks.

<mark style="color:blue;">`Windows - Command Prompt`</mark>

<div align="left"><figure><img src="https://4000871720-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F3JeKot5J5CqiKNQnsgZV%2Fuploads%2FcdDvDq01C5v5kWDLIl3e%2Fimage.png?alt=media&amp;token=48727114-e37e-4189-ae85-16b7a6e348d5" alt="" width="563"><figcaption></figcaption></figure></div>

<mark style="color:blue;">`Mac - Terminal`</mark>

<div align="left"><figure><img src="https://4000871720-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F3JeKot5J5CqiKNQnsgZV%2Fuploads%2Fau3zY3azLi0lt7z3anF4%2Fimage.png?alt=media&amp;token=0c0d5465-ed3f-42cd-b241-f22cac172e40" alt="" width="433"><figcaption></figcaption></figure></div>

{% hint style="info" %}
Read more here: <https://developer.mozilla.org/en-US/docs/Learn/Tools_and_testing/Understanding_client-side_tools/Command_line>
{% endhint %}

* **What is localhost?**

  In the context of web development, developers use "localhost" to refer to the local web server running on their own computer. They can develop and test web applications locally before deploying them live to a remote server.

  This means that other devices on the same network or on the internet cannot directly access web pages hosted on localhost, as it resolves to the loopback IP address (usually 127.0.0.1), which is reserved for communication within the same device.

<figure><img src="https://lh7-us.googleusercontent.com/o2vo8Finzze4FeetKAomlSTpoOwA7Ete6qhqtT-BaJt9me4aX0pRyL087E7SPDnNTQRqQK9GCE5HPPO3MtfwFaL5dA8CvNW15zmAsAKQzm3SEKEg2Wx0U-OFO2SOSyVIsXFVLfcK_e5yytN510v6VdU" alt="" width="375"><figcaption></figcaption></figure>

{% hint style="info" %}
Read more here: <https://blog.hubspot.com/website/what-is-localhost>
{% endhint %}

### Javascript

* **What is the difference between null and undefined in javascript?**

-> null is typically used as a placeholder to indicate that a variable or object property does not currently have a value, or that a function returns no meaningful result.

<figure><img src="https://4000871720-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F3JeKot5J5CqiKNQnsgZV%2Fuploads%2Fcjdh6LRpqBI7VGRRc0Lm%2FScreenshot%202024-04-29%20at%206.28.16%20PM.png?alt=media&amp;token=a3d4a598-c2c2-45a8-be9b-a0b14230a09f" alt=""><figcaption></figcaption></figure>

-> undefined typically indicates a variable that has been declared but has not been assigned any value, or an object property that does not exist.

<figure><img src="https://4000871720-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F3JeKot5J5CqiKNQnsgZV%2Fuploads%2F6ZHX1oUMw69jD4lu6pZI%2FScreenshot%202024-04-29%20at%206.30.03%20PM.png?alt=media&amp;token=d5d18f3c-3a69-4664-abe3-d1b9bfb92691" alt=""><figcaption></figcaption></figure>

### Deployment

* **Can I use other platforms to deploy the web app, e.g. Netlify, GitHub Pages?**&#x20;

  We encourage participants to use **Render** as the hosting platform, so that all the tooling is standardized and we can help troubleshoot issues with less complexity.
* **Why am I encountering an error when deploying on Render?**

  Check whether you have copied your external database url correctly.

  Troubleshoot using ChatGPT - paste the error message there.


# Policy Takeaways

## [How The Internet Works](https://docs.google.com/presentation/d/1O3754vQuw6JevvcGn9_dwySP58RjIw39NI1N0EByDlY/edit?usp=sharing)&#x20;

1. **Servers.** New paradigms: **Cloud** is more secure, more scalable and cheaper than on premise if configured optimally.&#x20;

   In an age where the Internet is borderless, "data sovereignty" or "digital sovereignty" means knowing **where your information is routed to and stored**, e.g. locally or internationally.
2. **Addressing.** ICANN and other regulatory bodies decide the allocation of IP addresses and domains, who then farm them out to governments or private sector bodies.
3. **Content Delivery Network (CDN).** The Internet by default has built in multiple redundancies, with multiple copies of Internet pages all over the world. Even if one server goes down, the rest of the Internet does not go down.&#x20;

## [Design Thinking Workshops](https://docs.google.com/presentation/d/1X4qJUZ89l3y8oBCMYtCen4U2NJmcG-pfXCxB6pzy9Gk/edit)&#x20;

1. Coming up with a good problem statement is not just applicable to building software, but also to any other domain. This allows you to pinpoint accurately and precisely what problem you are solving for, and therefore identify an appropriate and suitable solution.&#x20;
2. &#x20;We had gone through the design thinking process, where direct user feedback is very important to iterate on products. Unlike traditional policy environments where policies are implemented over long cycles to the magnitude of months and years, **this iteration is possible in digital**, because of how quickly changes can be made (e.g. styling, content) and propagated to live apps, to the magnitude of seconds, minutes and hours.&#x20;

## [HTML](https://docs.google.com/presentation/d/1lX4sG9PpmFI0krJzUWo4_PUc6seXWAG-kEia30d2bnQ/edit?usp=sharing)

1. Many aspects of the Internet's protocols, standards and software are **open source** and a product of **collective, collaborative effort** across many decades. \
   This was one of the fundamental principles of the design of the Internet's distributed, decentralised infrastructure, so no one entity has unilateral control over its infrastructure and protocols, promoting trust and reliability.&#x20;
2. Relatedly, there is no point trying to make your HTML code secret as the source code of all HTML pages on the Internet can be viewed by right clicking -> 'Inspect'.&#x20;
3. Of course, certain secrets like proprietary algorithms, API keys, passwords need to be kept very safe. But a lot of what is available on the Internet is **publicly accessible and open source**.&#x20;

## [CSS](https://docs.google.com/presentation/d/1SGU0c_D7UtgsknoXcqlBVIS5vfFl-lN6FGIdaXHS3Pc/edit#slide=id.g270c626dd25_0_152)

1. The **separation of concerns** in web development involves dividing different aspects of a web application into distinct sections, each responsible for a specific part of the functionality. HTML is responsible for structure and content, while CSS is for presentation and styling.&#x20;

   This allows each layer (HTML, CSS) to be clearly read, updated independently and in parallel, and reused across different documents.&#x20;
2. We had gone through the design thinking process, where direct user feedback is very important to iterate on products, as **user behaviour is unpredictable**. Unlike traditional policy environments, **iteration based on user feedback is possible in digital**, because of how quickly changes can be made (e.g. styling, content) and propagated to live apps.\
   Small changes to the styling and content can affect user behaviours and consequently achieve different outsized outcomes. Hence, tech companies spend large amounts of time and money to get these small changes right to drive the outcomes and behaviours they want, e.g. tweaking colours, buttons, logos, layout to drive more consumer spending.&#x20;

## [JavaScript](https://docs.google.com/presentation/d/1kbassHxOhAj5e9WMwOnMwJZYfE_VZvDiw8mmXSNv1Uo/edit?usp=sharing)

1. Once again, **separation of concerns** means that different parts of an application can be worked on at the same time. \
   In particular, many companies divide their software engineers across frontend and backend engineering. We have touched backend (Node.js to run the script.js) for the first time.&#x20;
2. JavaScript is designed to handle **events** such as user inputs, clicks, and other actions, making web pages responsive and interactive. This is what gives 'functionality' to the website beyond a static site.&#x20;
3. Features like callbacks, promises, and async/await allow JavaScript to perform tasks asynchronously, crucial for handling **operations like API calls** without freezing the user interface.


# Recommended Reading

## Coming soon! <a href="#user-experience-ux-design-thinking-process" id="user-experience-ux-design-thinking-process"></a>


# How does the Internet work?

{% embed url="<https://www.cloudflare.com/en-gb/learning/network-layer/how-does-the-internet-work/>" %}

{% embed url="<https://developer.mozilla.org/en-US/docs/Learn/Common_questions/Web_mechanics/How_does_the_Internet_work>" %}


# Web Development & Web Application

## What is a Web App?

{% embed url="<https://www.codecademy.com/article/what-is-a-web-app>" %}

## Full Stack

{% hint style="info" %}
[Full stack development is the process of developing both the frontend and backend of applications. Any application has a frontend (user-facing) component and a backend (database and logic) component.](https://aws.amazon.com/what-is/full-stack-development/#:~:text=Full%20stack%20development%20is%20the,user%20interactions%20with%20the%20application.)
{% endhint %}

### Front End

The **front end** (sometimes called **client side**) of a web app refers to the visible part of website or web application which is responsible for user experience. The user directly interacts with the front end portion of the web application or website.

<figure><img src="https://4000871720-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F3JeKot5J5CqiKNQnsgZV%2Fuploads%2FDbB6Q7XkRms75bVW9c6l%2Fimage.png?alt=media&amp;token=3d9633f5-204d-4773-b660-92117a3eaf3e" alt=""><figcaption><p>Source: <a href="https://www.upwork.com/resources/beginners-guide-back-end-development">https://www.upwork.com/resources/beginners-guide-back-end-development</a></p></figcaption></figure>

### Backend

The **back end** refers to the **server-side** development of web application or website with a primary focus on how the website works. It is responsible for managing the database through queries and APIs by client-side commands.

<figure><img src="https://4000871720-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F3JeKot5J5CqiKNQnsgZV%2Fuploads%2FTANw1ckuUKZyCmcqXxMg%2Fimage.png?alt=media&amp;token=5e6801b0-6ed8-45c7-9b06-f24a16e6840f" alt=""><figcaption><p>Source: <a href="https://www.upwork.com/resources/beginners-guide-back-end-development">https://www.upwork.com/resources/beginners-guide-back-end-development</a></p></figcaption></figure>

<details>

<summary>Courses</summary>

* [Full Stack Crash Course](https://learncsc.udemy.com/course/full-stack-crash-course/)
* [100 Days of Code](https://learncsc.udemy.com/course/100-days-of-code-web-development-bootcamp/learn/lecture/26934982#overview)

</details>


# Design Thinking / User Experience (UX)

<details>

<summary>Courses</summary>

* [Learn Figma](https://www.figma.com/resource-library/design-basics/)
* [Intro to UX: Fundamentals of Usability](https://skl.sh/3qeLaqz) (1hr 20min)
* [Udemy UX Design & User Experience Design Course - Theory Only](https://learncsc.udemy.com/course/how-to-change-careers-and-become-a-ux-designer/learn/lecture/5791876?start=0#overvieww) (3hr)
* [Design Systems for Developers](https://www.learnstorybook.com/design-systems-for-developers/) (9 chapters)
* [Udemy User Experience Design Essentials](https://learncsc.udemy.com/course/ui-ux-web-design-using-adobe-xd/learn/practice/1094222?start=start-page#overview) (12hr)
* [Master Digital Product Design](https://learncsc.udemy.com/course/master-digital-product-design-ux-research-ui-design/learn/lecture/16982102#overview)

</details>

<details>

<summary>Articles</summary>

* [An overview of Figma for developers](https://www.figma.com/best-practices/tips-on-developer-handoff/an-overview-of-figma-for-developers/)
* [Figma Constraints & Auto Layout for web developers](https://levelup.gitconnected.com/figma-constraints-auto-layout-for-web-developers-5625d8a7d65c)
* [A Figma publication for design systems creators, designers, developers, and managers](https://www.designsystems.com/)
* [Design Better Forms](https://medium.com/nextux/design-better-forms-96fadca0f49c)
* [Design Better Data Tables](https://medium.com/nextux/design-better-data-tables-4ecc99d23356)
* [DesignOps at Airbnb](https://airbnb.design/designops-airbnb/)
* [The Comprehensive 8pt Grid Guide](https://medium.com/swlh/the-comprehensive-8pt-grid-guide-aa16ff402179)

</details>

<details>

<summary>Videos</summary>

* [Gestalt Psychology and Why It's Essential for Good Design](https://www.youtube.com/watch?v=dk7cXdjX2Ys)
* [What is the UX design process](https://www.youtube.com/watch?v=Um3BhY0oS2c\&t=29s)
* [Bringing Simplicity to Complexity: How to Design at Scale](https://www.youtube.com/watch?v=cgKMuaW-Yw8)
* [Interface Design PRO-TIPS inside Figma](https://www.youtube.com/watch?v=JwRGM67gxs8)
* [Design Systems, when and how much?](https://youtu.be/Hx02SaL_IH0)
* [How to think like a Visual Designer](http://youtube.com/watch?v=hlI6xGfBjkQ)
* [Design Systems at Zendesk](https://www.youtube.com/watch?v=8sH5VqYqOU4)
* [Problem Solving Exercises](https://www.youtube.com/playlist?list=PLxk9zj3EDi0UQ3mq7k_-6pSoCQKS11iLd)

</details>

<details>

<summary>Books</summary>

* [Refactoring UI](https://info.techup.live/) (Adam Wathan, Steve Schoger)
* [How Customers Think](https://www.amazon.sg/How-Customers-Think-Essential-Insights/dp/1578518261) (Gerald Zaltman)
* [UX Design: The Definitive Beginner’s Guide](https://www.uxpin.com/studio/ebooks/ux-design-definitive-beginner-guide/)
* [Design Systems Handbook](https://www.designbetter.co/design-systems-handbook)
* [The Design of Everyday Things](https://www.amazon.sg/Design-Everyday-Things-Revised-Expanded/dp/0465050654)
* [Don't Make Me Think](https://www.amazon.sg/Dont-Make-Think-Revisited-Usability/dp/0321965515)

</details>


# Product Management

<details>

<summary>Articles</summary>

* [Product Coalition](https://productcoalition.com/)
* [12 Things about Product-Market Fit](https://a16z.com/2017/02/18/12-things-about-product-market-fit/)
* [The Agony and Ecstasy of Building with Data](https://medium.com/the-year-of-the-looking-glass/the-agony-and-ecstasy-of-building-with-data-56215764d67c)
* [Ruthless Prioritisation](https://blackboxofpm.com/ruthless-prioritization-e4256e3520a9)
* [The Only Thing that Matters](https://pmarchive.com/guide_to_startups_part4.html)
* [Managing and developing Product Managers](https://blackboxofpm.com/managing-and-developing-product-managers-2f9a3963fab6)
* [Intercom Product Management](https://marketing.intercomcdn.com/assets/pm-book/v3/Intercom_on_Product_Management.pdf)
* [Cloud Security: A Primer for Policymakers](https://carnegieendowment.org/2020/08/31/cloud-security-primer-for-policymakers-pub-82597)
* [Shapeup By Basecamp](https://basecamp.com/shapeup/0.3-chapter-01)
* [Local-First Software](https://www.inkandswitch.com/local-first.html)

</details>

<details>

<summary>Courses</summary>

* [Become a Product Manager](https://learncsc.udemy.com/course/become-a-product-manager-learn-the-skills-get-a-job/learn/)

</details>

<details>

<summary>Books</summary>

* [Handbook on being a product manager](https://about.gitlab.com/handbook/product/)
* [The Product Book](https://www.amazon.com/Product-Book-Become-Great-Manager-ebook/dp/B071HFBGXR#:~:text=Based%20upon%20Product%20School%27s%20curriculum,here%20to%20help%20you%20succeed!)
* [The Lean Product Playbook](https://www.amazon.sg/Lean-Product-Playbook-Innovate-Products/dp/1118960874)
* [Swipe to Unlock: A Primer on Technology and Business Strategy](https://swipetounlock.com/)
* [Zero to One](https://www.amazon.sg/Zero-One-Notes-Startups-Future/dp/0804139296)
* [Loonshots: How to nurture the crazy ideas that win wars, cure diseases and transform industries](https://www.amazon.sg/Loonshots-Nurture-Diseases-Transform-Industries/dp/1250185963)
* [On Writing Well: The Classic Guide to writing non-fiction](https://www.amazon.sg/Writing-Well-Classic-Guide-Nonfiction/dp/0060891548)

</details>


# Data Science & Machine Learning

<details>

<summary>Videos</summary>

* [Introduction to machine learning problem framing](https://developers.google.com/machine-learning/problem-framing)
* [Machine learning crash course](https://developers.google.com/machine-learning/crash-course/ml-intro)
* [2020 Machine Learning Roadmap](http://youtube.com/watch?v=pHiMN_gy9mk)

</details>

<details>

<summary>Articles</summary>

* [15 Important product metrics you should be tracking](https://amplitude.com/blog/product-metrics-guide)
* [Why Product Metrics Matter](https://www.productplan.com/learn/product-metrics-matter/)
* [Qualtrics - Product Metrics: What you Need to Know](https://www.qualtrics.com/au/experience-management/product/product-metrics/)
* [Product Metrics Framework](https://userpilot.com/blog/product-metrics-framework/)
* [Google - good data analysis](https://developers.google.com/machine-learning/guides/good-data-analysis)
* [The Data Science Life-Cycle](https://towardsdatascience.com/stoend-to-end-data-science-life-cycle-6387523b5afc)
* [Don’t trust data scientists to set performance metrics](https://towardsdatascience.com/dont-trust-data-scientists-to-set-performance-metrics-908bcd80bac6)
* [The unspoken rules of visualisation](https://datajournalism.com/read/longreads/the-unspoken-rules-of-visualisation)
* [Introduction to Natural Language Processing for Text](https://towardsdatascience.com/introduction-to-natural-language-processing-for-text-df845750fb63)
* [Amenity Detection and Beyond — New Frontiers of Computer Vision at Airbnb](https://medium.com/airbnb-engineering/amenity-detection-and-beyond-new-frontiers-of-computer-vision-at-airbnb-144a4441b72e)
* [Build a Recommendation Engine With Collaborative Filtering](https://realpython.com/build-recommendation-engine-collaborative-filtering/#:~:text=Collaborative%20filtering%20is%20a%20family,type%20of%20collaborative%20filtering%20approach.)
* [A Visual and Interactive Guide to the Basics of Neural Networks](http://jalammar.github.io/visual-interactive-guide-basics-neural-networks/)

</details>

<details>

<summary>Books</summary>

* [Measure What Matters](https://www.amazon.sg/Measure-What-Matters-Simple-Drives/dp/024134848X/ref=asc_df_024134848X/?tag=googleshoppin-22\&linkCode=df0\&hvadid=389049660685\&hvpos=\&hvnetw=g\&hvrand=3444570859377704106\&hvpone=\&hvptwo=\&hvqmt=\&hvdev=c\&hvdvcmdl=\&hvlocint=\&hvlocphy=9062526\&hvtargid=pla-440960730426\&psc=1\&mcid=ab01fd7d565f3c368af189cdcfd69e09) (John Doerr)
* [The Signal and the Noise](https://www.amazon.com/Signal-Noise-Many-Predictions-Fail-but/dp/0143125087) (Nate Silver)
* [Lean Analytics: Use Data to Build A Better Startup Faster](https://leananalyticsbook.com/) (Alistair Croll & Benjamin Yoskovitz)

</details>


# Format

## Administrative Briefing&#x20;

{% hint style="info" %}
Please refer to [this deck](https://docs.google.com/presentation/d/18fffslHkB1uyIu1ImXbebf9fjO2CcO3d8bdXMQ5BUi0/edit#slide=id.g4de465b1ea_0_34) for information on the Web App Presentations.&#x20;
{% endhint %}

## Detailed Web App Requirements

As earlier mentioned in the [TechUp Deliverables](https://info.techup.live/about-techup/why-do-techup/deliverables) section, at the end of TechUp you will need to present your web app that meets the following requirements:&#x20;

1. **Articulate a user problem**

* Clearly identify and describe a specific problem or need that users face, which your web app aims to address or solve. This should serve as the driving force behind the development of your app.
* *In plain English: There is a clear problem that your web app is solving, in one sentence.* <br>

2. **Use CSS to design and style page**

* Implement visually appealing and cohesive design elements throughout the web app. This includes layout structuring, colour schemes, typography, and overall aesthetic enhancements.
* *In plain English: Your web app is not jarring or ugly at first glance. You have chosen decent colours, fonts, sizes and layout that is not unpleasant.* <br>

3. **Interactivity with Javascript**

* Implement interactive features and functionalities using JavaScript. This could involve dynamic content updates, form validation, event handling, and other client-side scripting techniques to provide interactivity.&#x20;
* *In plain English: When you click a button, something happens on your web app (that is not just taking you to another web page).* <br>

4. **Intuitive UX flow**

* Design a clear and intuitive user experience (UX) flow for your web app, encompassing navigation structure, User Interface (UI) design and information presentation.&#x20;
* *In plain English: Your user can easily understand how to use the web app to efficiently accomplish their tasks/goals.* <br>

5. **Reading and writing into a database (optional)**

* Optionally, integrate functionality to read and write data into a database. This could involve storing user information, managing content, or any other data persistence requirements that support the core functionality of the web app.
* *In plain English: you can read, write, update and/or delete data from a database.* <br>

**In addition, the web app MUST be deployed to the Internet, and hosted as a live website using** [**Render**](https://info.techup.live/admin-instructions/tooling-and-software/render) **with a purchased domain name and CDN using** [**Cloudflare**](https://info.techup.live/admin-instructions/tooling-and-software/cloudflare)**.** In other words, your web app cannot just be hosted on your local computer without being hosted on the Internet. Your web app should also be connected to **Google Analytics**.&#x20;

## Objective

**The primary objective of the web app presentations is to receive feedback as part of the learning process,** as a culmination of the knowledge and skills you have built up over the month of TechUp.&#x20;

Your web apps serve as a tangible representation of your learning journey, showcasing your ability to apply theoretical concepts like design thinking and web development to real-world projects.<br>

## Presentation Details

You will be divided into your Learning Groups for your web app presentations over a 2-hour slot (see [Presentation Schedule](https://info.techup.live/web-app-presentations/presentation-schedule)).

The presentations will be attended by some instructors/stakeholders (e.g. MCI Products Directorate Director Chen Kaiwei / DD Li Zheng; OGP's Policy and Product leaders).&#x20;

**Each participant will have 5 minutes to:**&#x20;

1. State their problem statement&#x20;
2. Click through the web app to show what their web app does (please have your web app open for this segment)&#x20;
3. Explain what user research they did to confirm the problem statement, make adjustments to the web app along the process etc. (if any)&#x20;
4. Explain how their JavaScript code in their web app works (please navigate to show the room your code for this segment). &#x20;

Slides are not necessary, but you are welcome to show them if you have any.&#x20;

Our panel will then ask any clarifying questions and give feedback on your engineering, design and product considerations for around 5 minutes. :smile:

## Pass Criteria&#x20;

<mark style="background-color:orange;">TechUp is the baseline, minimum requirement for tech policy officers in DTC.</mark>&#x20;

If you meet all 4 mandatory criteria above (and your web app is live on the Internet and connected to a domain name), you will have deemed to have passed TechUp and will receive a graduation certificate. Congratulations! :clap: This is but the start of a lifelong journey of learning about this fast-evolving domain.&#x20;

If you require more time or have any exigencies to take care of on 27 or 28 May, fret not. You will have a **6-month grace period** to run through the materials again before presenting your completed web app at a subsequent make-up session 6 months later. *Please approach the organising committee to let us know and we will schedule you for a make-up presentation.*&#x20;


# Presentation Schedule

## 27 May

| Timeslot        | Gigabyte            | Terabyte 1          | Terabyte 2          |
| --------------- | ------------------- | ------------------- | ------------------- |
| 10am - 12pm     | Nov 23 participants | Nov 23 participants | Nov 23 participants |
| 12pm - 1.30pm   | Lunch break         | Lunch break         | Lunch break         |
| 1.30pm - 3.30pm | LG 1                | LG 2                | LG 3                |
| 3.30pm - 4.00pm | Break               | Break               | Break               |
| 4.00pm - 6.00pm | LG 4                | LG 5                | LG 6                |

## 28 May

| Timeslot        | Gigabyte           | Terabyte 1         | Terabyte 2         |
| --------------- | ------------------ | ------------------ | ------------------ |
| 10am - 12pm     | LG 7               | LG 8               | LG 9               |
| 12pm - 1.30pm   | Lunch break        | Lunch break        | Lunch break        |
| 1.30pm - 3.30pm | LG 10              | LG 11              | LG 12              |
| 3.30pm - 4.00pm | Break              | Break              | Break              |
| 4.00pm - 6.00pm | Buffer for overrun | Buffer for overrun | Buffer for overrun |


# Programme

Demo Day will be on 29 May 2024 at the MCI Atrium.&#x20;

## Administrative Briefing&#x20;

{% hint style="info" %}
Please refer to this link for the [administrative briefing slides](https://docs.google.com/presentation/d/18fffslHkB1uyIu1ImXbebf9fjO2CcO3d8bdXMQ5BUi0/edit#slide=id.g271f7525f6b_0_44) on Demo Day.
{% endhint %}

## Programme

<table><thead><tr><th width="208">Time</th><th>Programme</th><th>Remarks</th></tr></thead><tbody><tr><td>9.30am to 10.30am</td><td>Reflections and Booth Setup</td><td>Mandatory for all TechUp 2.0 participants</td></tr><tr><td>10.30am to 11.30am</td><td>Group A booths</td><td>Check groupings <a href="/demo-day/booths-layout">here</a></td></tr><tr><td>11.30am to 12.30pm</td><td>Group B booths</td><td>Check groupings <a href="/demo-day/booths-layout">here</a></td></tr><tr><td>12.45pm to 1.30pm</td><td>Prizes &#x26; Presentations of Winning Web Apps</td><td></td></tr><tr><td>1.30pm to 2.00pm</td><td>Closing Ceremony<br>- Closing Remarks by PS<br>- Reflections by Yunxi<br>- Group Phototaking</td><td></td></tr><tr><td>2.00pm</td><td>End</td><td></td></tr></tbody></table>

*Lunch is available from 11.45am to 2.00pm.*


# Admin Instructions

## Administrative Briefing&#x20;

{% hint style="info" %}
Please refer to this link for the [administrative briefing slides](https://docs.google.com/presentation/d/18fffslHkB1uyIu1ImXbebf9fjO2CcO3d8bdXMQ5BUi0/edit#slide=id.g271f7525f6b_0_44) on Demo Day.
{% endhint %}


# Booths Layout

Please see slides 2 and 3 to check whether you are in Group A or B.&#x20;

{% embed url="<https://docs.google.com/presentation/d/1oii-XVzYNeDl8tFmTIWAi8mo64O3DlMuzqVYm52Eu0M/edit?usp=sharing>" %}


