Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
36 commits
Select commit Hold shift + click to select a range
b394cab
Initialise server
craig-dsilva May 18, 2026
424d6ab
Initialise client
craig-dsilva May 18, 2026
27655d0
Format server
craig-dsilva May 18, 2026
c24df37
Client Server connection
craig-dsilva May 18, 2026
3e9255f
Send message
craig-dsilva May 22, 2026
d4179ce
Merge pull request #1 from craig-dsilva/send-message
craig-dsilva May 22, 2026
bdc70cb
Add chat logic via hook
craig-dsilva May 22, 2026
ce5c025
Add dummy chat data
craig-dsilva May 22, 2026
2cbec44
Add message and history logic on server
craig-dsilva May 22, 2026
121c702
Create basic client UI
craig-dsilva May 22, 2026
43f172e
UI complete
craig-dsilva May 22, 2026
d223586
Tweak export
craig-dsilva May 22, 2026
6035631
Merge pull request #2 from craig-dsilva/ui
craig-dsilva May 27, 2026
89ff281
Message component
craig-dsilva May 27, 2026
2a50a94
Format message time
craig-dsilva May 27, 2026
feae6ec
Message time
craig-dsilva May 27, 2026
c009b9f
Merge pull request #3 from craig-dsilva/message-time
craig-dsilva May 27, 2026
19e8609
Healthcheck
craig-dsilva May 28, 2026
04f806e
Merge pull request #4 from craig-dsilva/healthcheck
craig-dsilva May 28, 2026
ded7da2
Add server URL
craig-dsilva May 28, 2026
ba1ed99
package-lock.json
craig-dsilva May 29, 2026
c68b736
Merge pull request #5 from craig-dsilva/node-22
craig-dsilva May 29, 2026
0e768c0
Polling
craig-dsilva May 29, 2026
fce8eed
Add routing for protocols
craig-dsilva May 29, 2026
4ac4c62
Add styles for routing
craig-dsilva May 29, 2026
c88ed3b
Merge pull request #6 from craig-dsilva/poll
craig-dsilva May 29, 2026
d46c28b
Add like button and counter
craig-dsilva May 29, 2026
bb698f3
Add like and dislike counter
craig-dsilva May 29, 2026
ca0770c
Merge pull request #7 from craig-dsilva/likes
craig-dsilva May 29, 2026
257d84a
Cleanup
craig-dsilva May 30, 2026
125601c
Responsive design
craig-dsilva May 30, 2026
b7644fd
Docker
craig-dsilva May 30, 2026
fecf01b
Server URL
craig-dsilva May 30, 2026
0c76b9e
Fix package install on Client Docker
craig-dsilva May 30, 2026
4eb344a
Fix package install on Client Docker
craig-dsilva May 30, 2026
1c0311e
Fix package install on Client Docker
craig-dsilva May 30, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 24 additions & 0 deletions chat-app/client/.dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
lerna-debug.log*

node_modules
dist
dist-ssr
*.local

# Editor directories and files
.vscode/*
!.vscode/extensions.json
.idea
.DS_Store
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?
24 changes: 24 additions & 0 deletions chat-app/client/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
lerna-debug.log*

node_modules
dist
dist-ssr
*.local

# Editor directories and files
.vscode/*
!.vscode/extensions.json
.idea
.DS_Store
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?
27 changes: 27 additions & 0 deletions chat-app/client/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
ARG NODE_VERSION=24.15.0-alpine3.23
ARG NGINX_VERSION=alpine3.23

FROM node:24.15.0-alpine3.23 AS builder

WORKDIR /app

COPY package.json package-lock.json* ./

RUN --mount=type=cache,target=/root/.npm npm ci --include=dev

COPY . .

RUN npm run build

FROM nginxinc/nginx-unprivileged:alpine3.23 AS runner

COPY nginx.conf /etc/nginx/nginx.conf

COPY --chown=nginx:nginx --from=builder /app/dist /usr/share/nginx/html

USER nginx

EXPOSE 8080

ENTRYPOINT ["nginx", "-c", "/etc/nginx/nginx.conf"]
CMD ["-g", "daemon off;"]
18 changes: 18 additions & 0 deletions chat-app/client/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# React + Vite

This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules.

Currently, two official plugins are available:

- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react) uses [Oxc](https://oxc.rs)
- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react-swc) uses [SWC](https://swc.rs/)

## React Compiler

The React Compiler is enabled on this template. See [this documentation](https://react.dev/learn/react-compiler) for more information.

Note: This will impact Vite dev & build performances.

## Expanding the ESLint configuration

If you are developing a production application, we recommend using TypeScript with type-aware lint rules enabled. Check out the [TS template](https://github.com/vitejs/vite/tree/main/packages/create-vite/template-react-ts) for information on how to integrate TypeScript and [`typescript-eslint`](https://typescript-eslint.io) in your project.
21 changes: 21 additions & 0 deletions chat-app/client/eslint.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
import js from '@eslint/js'
import globals from 'globals'
import reactHooks from 'eslint-plugin-react-hooks'
import reactRefresh from 'eslint-plugin-react-refresh'
import { defineConfig, globalIgnores } from 'eslint/config'

export default defineConfig([
globalIgnores(['dist']),
{
files: ['**/*.{js,jsx}'],
extends: [
js.configs.recommended,
reactHooks.configs.flat.recommended,
reactRefresh.configs.vite,
],
languageOptions: {
globals: globals.browser,
parserOptions: { ecmaFeatures: { jsx: true } },
},
},
])
13 changes: 13 additions & 0 deletions chat-app/client/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Chat App</title>
</head>
<body>
<div id="root"></div>
<script type="module" src="/src/main.jsx"></script>
</body>
</html>
49 changes: 49 additions & 0 deletions chat-app/client/nginx.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
worker_processes auto;

pid /tmp/nginx.pid;

events {
worker_connections 1024;
}

http {
include /etc/nginx/mime.types;
default_type application/octet-stream;

access_log off;
error_log /dev/stderr warn;

sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
keepalive_requests 1000;

gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript image/svg+xml;
gzip_min_length 256;
gzip_vary on;

server {
listen 8080;
server_name localhost;

root /usr/share/nginx/html;
index index.html;

location / {
try_files $uri /index.html;
}

location ~* \.(?:ico|css|js|gif|jpe?g|png|woff2?|eot|ttf|svg|map)$ {
expires 1y;
access_log off;
add_header Cache-Control "public, immutable";
}

location /static/ {
expires 1y;
add_header Cache-Control "public, immutable";
}
}
}
Loading