Skip to content

Commit cbded12

Browse files
author
Herve Tribouilloy
committed
docs: document project structure and observability principles
1 parent e199657 commit cbded12

6 files changed

Lines changed: 120 additions & 180 deletions

File tree

.gitignore

Lines changed: 12 additions & 134 deletions
Original file line numberDiff line numberDiff line change
@@ -1,139 +1,17 @@
1-
# Logs
2-
logs
3-
*.log
4-
npm-debug.log*
5-
yarn-debug.log*
6-
yarn-error.log*
7-
lerna-debug.log*
1+
# IDE
2+
.idea
83

9-
# Diagnostic reports (https://nodejs.org/api/report.html)
10-
report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
4+
# dependencies
5+
node_modules
116

12-
# Runtime data
13-
pids
14-
*.pid
15-
*.seed
16-
*.pid.lock
7+
# editor temp files
8+
*.swp
179

18-
# Directory for instrumented libs generated by jscoverage/JSCover
19-
lib-cov
20-
21-
# Coverage directory used by tools like istanbul
22-
coverage
23-
*.lcov
24-
25-
# nyc test coverage
26-
.nyc_output
27-
28-
# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
29-
.grunt
30-
31-
# Bower dependency directory (https://bower.io/)
32-
bower_components
33-
34-
# node-waf configuration
35-
.lock-wscript
36-
37-
# Compiled binary addons (https://nodejs.org/api/addons.html)
38-
build/Release
39-
40-
# Dependency directories
41-
node_modules/
42-
jspm_packages/
43-
44-
# Snowpack dependency directory (https://snowpack.dev/)
45-
web_modules/
46-
47-
# TypeScript cache
48-
*.tsbuildinfo
49-
50-
# Optional npm cache directory
51-
.npm
52-
53-
# Optional eslint cache
54-
.eslintcache
55-
56-
# Optional stylelint cache
57-
.stylelintcache
58-
59-
# Optional REPL history
60-
.node_repl_history
61-
62-
# Output of 'npm pack'
63-
*.tgz
64-
65-
# Yarn Integrity file
66-
.yarn-integrity
67-
68-
# dotenv environment variable files
10+
# local environment
6911
.env
70-
.env.*
71-
!.env.example
72-
73-
# parcel-bundler cache (https://parceljs.org/)
74-
.cache
75-
.parcel-cache
76-
77-
# Next.js build output
78-
.next
79-
out
80-
81-
# Nuxt.js build / generate output
82-
.nuxt
83-
dist
84-
85-
# Gatsby files
86-
.cache/
87-
# Comment in the public line in if your project uses Gatsby and not Next.js
88-
# https://nextjs.org/blog/next-9-1#public-directory-support
89-
# public
90-
91-
# vuepress build output
92-
.vuepress/dist
93-
94-
# vuepress v2.x temp and cache directory
95-
.temp
96-
.cache
97-
98-
# Sveltekit cache directory
99-
.svelte-kit/
100-
101-
# vitepress build output
102-
**/.vitepress/dist
103-
104-
# vitepress cache directory
105-
**/.vitepress/cache
106-
107-
# Docusaurus cache and generated files
108-
.docusaurus
109-
110-
# Serverless directories
111-
.serverless/
112-
113-
# FuseBox cache
114-
.fusebox/
115-
116-
# DynamoDB Local files
117-
.dynamodb/
118-
119-
# Firebase cache directory
120-
.firebase/
121-
122-
# TernJS port file
123-
.tern-port
124-
125-
# Stores VSCode versions used for testing VSCode extensions
126-
.vscode-test
127-
128-
# yarn v3
129-
.pnp.*
130-
.yarn/*
131-
!.yarn/patches
132-
!.yarn/plugins
133-
!.yarn/releases
134-
!.yarn/sdks
135-
!.yarn/versions
12+
widget.local.crt
13+
widget.local.key
13614

137-
# Vite logs files
138-
vite.config.js.timestamp-*
139-
vite.config.ts.timestamp-*
15+
# generated / local artefacts
16+
www
17+
test-results

README.md

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,29 @@ This widget focuses on **delivery and safety**, not business promises.
3838
- **Deferred by default** – does not require early page execution to function
3939
- **Layered structure** – organised to encourage consistency across ReactEdge widgets without enforcing a framework
4040
- **Boring on purpose** – clarity over cleverness
41+
- **Observable by the host** – key lifecycle and interaction events are emitted to allow integration with analytics or monitoring tools without coupling to a specific provider
4142

4243
---
4344

45+
## Project structure (high level)
46+
47+
This repository contains the widget itself, along with supporting tooling used for development, testing, and community maintenance.
48+
49+
- `vite_project/`
50+
Source code for the USP widget and its build configuration.
51+
52+
- `tests/`
53+
End-to-end tests (Playwright) used to validate widget behaviour in a real browser environment.
54+
55+
- `docker/` and `docker-compose.yml`
56+
Optional local development tooling. These are provided for convenience and are not required to use the widget.
57+
58+
- `.github/`
59+
GitHub metadata (issue templates, CI workflows, etc.) to support collaboration and maintainability.
60+
61+
- `www/`
62+
Generated build output. This folder is intentionally not committed to the repository.
63+
4464
## Installation (high level)
4565

4666
The widget is delivered as a standalone JavaScript file and exposed via a custom element.
@@ -51,3 +71,45 @@ Typical usage looks like:
5171
<script src="path-to-widget.js"></script>
5272

5373
<reactedge-usp-widget></reactedge-usp-widget>
74+
```
75+
76+
## Local development
77+
78+
This project uses Node.js and npm.
79+
80+
From the repository root:
81+
82+
```bash
83+
npm install
84+
```
85+
86+
To run the widget locally:
87+
88+
```bash
89+
cd vite_project
90+
npm install
91+
npm run dev
92+
```
93+
94+
To run the test suite:
95+
```bash
96+
npx playwright test --config=tests/playwright.dev.config.ts
97+
```
98+
99+
## Deploying the widget
100+
101+
ReactEdge widgets are deployed as **static JavaScript artefacts**.
102+
They do not require a server-side runtime once built.
103+
104+
### Build the artefact
105+
106+
From the `vite_project` directory:
107+
108+
```bash
109+
npm run build
110+
```
111+
112+
This produces a versioned JavaScript file in the www/ directory
113+
(e.g. widget-usp@x.y.z.iife.js).
114+
115+
The www/ Generated build output produced by the build process. This folder is intentionally not committed to the repository.
Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,19 @@
11
-----BEGIN CERTIFICATE-----
2-
MIIDFzCCAf+gAwIBAgIUAldtzZoCay1Lh6bRuR4FnXWcVmYwDQYJKoZIhvcNAQEL
3-
BQAwGzEZMBcGA1UEAwwQd2lkZ2V0LnVzcC5jby51azAeFw0yNTEyMTAxNDM0MDFa
4-
Fw0yNjEyMTAxNDM0MDFaMBsxGTAXBgNVBAMMEHdpZGdldC51c3AuY28udWswggEi
5-
MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtlrJlXq0TOsxo/JNSFl1yNYVz
6-
1kCi8gcnfVonb8WjffQTR5fgB1M1mfMPhy6D55SrNGYtkTJF3tPdo9nRICqo9AFj
7-
L0LHaLZ10c6Mbh+EhQAVAepuEgmEUHDIT5e1m/nPBfh7jMAs6ezGHl1j9xFjtLTS
8-
XESGpvFT/otzYTXSwgB9yATwdAy7ruQZkeTs43q1Rkdk5lQFcBIOcawoUxWdytrt
9-
nMfHRBkUw10S4KWIr2yQDPaEWv0S4zTdn9EFRcfgbAJhKTfM5dTRQ7TDGmoy+ZAC
10-
Isq4l+KsEMKU6ZiLgKHDmSpcVh/iuDKCpok5+4uBpmUGdBDsPJRmI370EEyjAgMB
11-
AAGjUzBRMB0GA1UdDgQWBBRrgBZCIAZzOtSbgILDIA+zgMY+6jAfBgNVHSMEGDAW
12-
gBRrgBZCIAZzOtSbgILDIA+zgMY+6jAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3
13-
DQEBCwUAA4IBAQAtze3F9PiOMGmqufJu00a5uRpEusr9+C7TWGZS0Q71R3ORFkyr
14-
klUYftU6X94qA7UByhI5JiRdJ4b2jjsRkkl58kavlMDrzrIFSjN4+lP2bYdf+VBj
15-
hqszVgDqpM/MXfZsDUFyWGyy+AhlT2xqm//WrYmLovJLfwgMZD0YpR0EbqavrLXK
16-
K2adNzXYF1DELwdgUQ2NF9fj7Vd9WBxD1j2FSMJSbqNolniQTw7lB5mmW327FN3u
17-
GcIT4gjjHRTFZaptsfjv+b/bXqIW4pmXadbbjJti3zTXDq/SNugo8hP8j5I/zAcG
18-
VXI+8eqzkA/oaGbSHGShLI2Ttrg9vBG0Sgw5
2+
MIIDFzCCAf+gAwIBAgIUJaHvmg4HnMztVd5+tlPGpd8wmYYwDQYJKoZIhvcNAQEL
3+
BQAwGzEZMBcGA1UEAwwQd2lkZ2V0LnVzcC5jby51azAeFw0yNjAxMjUxMzQ1NDla
4+
Fw0yNzAxMjUxMzQ1NDlaMBsxGTAXBgNVBAMMEHdpZGdldC51c3AuY28udWswggEi
5+
MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC8zXKanCRMsC9X9ATY9/80xSsB
6+
7W4ZLU07AZ2EKEi9/qfMK5c4zHrKoQRYLko650yBIa2BTEkmHfJ4sS2e+jIlOF6o
7+
zB3aATfHxa7G0qLwZXCWPu9/1mgvapCvDU38HiHlrE0dW/fj4/H1NDcaYlbndc5+
8+
NHEE48HwYkn0RG+B6itHeH1QsZooEa4pvAIzmPE6zNl8NuY8QnfquOWbt3gGV5AC
9+
i1uUKt2I/D47B8vgIzT22sF9pxFDeZFxcKMASRUjWh26mNB+S5SNmyPT4HSxnwGa
10+
Zi5IjxioQR8GEFQq9BqmDXEyJHbVa5UhTpcvMPnWA13w8SwrZUDQJ9klYDrFAgMB
11+
AAGjUzBRMB0GA1UdDgQWBBS+OGSKx3nu665U4alcj2EDCI8feTAfBgNVHSMEGDAW
12+
gBS+OGSKx3nu665U4alcj2EDCI8feTAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3
13+
DQEBCwUAA4IBAQCWzwoUvSuGHtSMbTOaPuunRPrk49W2XEibAKvspR51ujkrY0w9
14+
+TcWPNlBOabkBOBke0PnP3hVdm4QqTlCCVJ3EoDpfnJoP3hkt+payMKE3Ksv7yUh
15+
3UMDJ1lP/X2tzE7Pw32oPEsTO2B0cqfO8GkYgBTkgOeJMDZc0colBsCAx9VHNnIG
16+
exqI1INB32t40LrMNeEhHkSSgZfeDhXUTxZqgvX5e80ckpGeufzjXKDlrGBQLLgK
17+
6iCmmvNxYxqBajVIpdb1B6/G+bjAZeElX7/00w8BpAAy8M25+tR1q2130SSdrK5N
18+
vVzhlsd9dRWwr3oakYzHJCeOP4Fop1x0PalJ
1919
-----END CERTIFICATE-----
Lines changed: 26 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,28 @@
11
-----BEGIN PRIVATE KEY-----
2-
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCtlrJlXq0TOsxo
3-
/JNSFl1yNYVz1kCi8gcnfVonb8WjffQTR5fgB1M1mfMPhy6D55SrNGYtkTJF3tPd
4-
o9nRICqo9AFjL0LHaLZ10c6Mbh+EhQAVAepuEgmEUHDIT5e1m/nPBfh7jMAs6ezG
5-
Hl1j9xFjtLTSXESGpvFT/otzYTXSwgB9yATwdAy7ruQZkeTs43q1Rkdk5lQFcBIO
6-
cawoUxWdytrtnMfHRBkUw10S4KWIr2yQDPaEWv0S4zTdn9EFRcfgbAJhKTfM5dTR
7-
Q7TDGmoy+ZACIsq4l+KsEMKU6ZiLgKHDmSpcVh/iuDKCpok5+4uBpmUGdBDsPJRm
8-
I370EEyjAgMBAAECggEAKop868TZC5ZkU/JaNErQ2dVuACZorsY7pJzexD1rJRcQ
9-
As2P1dJVvRQechbB+od9crujstUbie4C5BVsowiMC93InUMOzYnG9XbWdKnkRXjG
10-
vV870X/QH0ILcbu3xUUVYnvnGngy/I7TfPYiEwaQl2vIyKjeDlXJXLlL+ZnANAb5
11-
/X+6itdSJH0nIj5OENYzwPAEculHehiiVVIl6gZDQLbl7MnSlAz+EjriEXJMxtup
12-
w13aAEX6Odh7Tj7Omv9VFQAePOgOelUgJtxVMET7kiqP3Pk0oNFpBRGpclcd+mwl
13-
RNRmdDQYov3YLzsAYgP5BLVmiWb2Y9/QDswfCpI88QKBgQDU4z3oXbb/32CkLj55
14-
faEleYWlmMPY+KYKGJU13x+YFMFfPLee6yQLA56TpX7kIfyHjz+cU0sBDRAoNgXc
15-
aZdI+KZcj3l0D67mxwvyO4ZX6QVeAHrWtAWL0gNFd/F3M28TjvEmkKZA6lNXd/p4
16-
b7rhyW4LnUAQZbYstcUZsyjXuQKBgQDQvhKRFHRBivJ2L55UQbdpwssU/corz1+h
17-
P6sH30Qkd5zxV+0nvwLWHeE/X1FNeP1yyDlZxnYROYkzV/OFOld7cPU046U4/3LK
18-
NW/x5DLUJ8cutuZkvV7XmesVaZiZ8pTeKELHvjGSMIpLSNkds1eda2sQYWq1dE2h
19-
bVNSAPu9OwKBgQDR3rRJPxoJZc2ADZbJbnBO4V4/wjpQy8/kZBe05CHha5S2rsTW
20-
hjkiIo9SPvS5Mkgh27Z6BiMLBjXHbnqYr//UkExxM4AoSs3B9LhyNPxb7fy8jvyK
21-
bS6KiJ9w/K2vNaVrQp+5xSAhHuDKeh0SXhN+Q3WZPYzKnXra2NdWXqkFAQKBgDmT
22-
xBFKgAq4JcrdtaFuAwZkGZovqr1M1QboRefE+MnKSHr1ks+8yy5+TWwqgYWKEva/
23-
LbqKmHSF10dXQi+EeS7uaGRvSlqfc209MiSZmj+UvUcwYfp1lZyIsyRT3SjRlah1
24-
mH36AzhctTiw3lpn5ongYEbDaCim7ObS/gGHjeiTAoGAJN5oGwF7kGDhLtMlZsQ3
25-
dSbUW9FHYkeGWy3i00JpfcmKdH23ldeMABY+WnyrtoNsUa/6pbUgrqaAXDTM2fP4
26-
CCjv4DtL86fdg9yehWyEybXqiLkpOMvhdcLI+xSgfh4HEptUUVW6lWuUjhFMCnAt
27-
UV7IlCex5dxNfdNk8RpcSYc=
2+
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQC8zXKanCRMsC9X
3+
9ATY9/80xSsB7W4ZLU07AZ2EKEi9/qfMK5c4zHrKoQRYLko650yBIa2BTEkmHfJ4
4+
sS2e+jIlOF6ozB3aATfHxa7G0qLwZXCWPu9/1mgvapCvDU38HiHlrE0dW/fj4/H1
5+
NDcaYlbndc5+NHEE48HwYkn0RG+B6itHeH1QsZooEa4pvAIzmPE6zNl8NuY8Qnfq
6+
uOWbt3gGV5ACi1uUKt2I/D47B8vgIzT22sF9pxFDeZFxcKMASRUjWh26mNB+S5SN
7+
myPT4HSxnwGaZi5IjxioQR8GEFQq9BqmDXEyJHbVa5UhTpcvMPnWA13w8SwrZUDQ
8+
J9klYDrFAgMBAAECggEBAIIHvPZes2Fdtj2NAgmsQ0fEw2oAa+NLH/WTlzh9xhuU
9+
V1x2aR/lNGx5mNRijR0kT7xfxW9XasmltmkJHbJv/jlEKW13pteOHyynKUglqbKH
10+
KpNPpQMWV4rQifUF5L/OwOm9UR73SDLburh1zb2OHOwsZprk4zHK6rbz+psQxvth
11+
a+nCJzVWo/r4tvV0qiRsnYKT9U8e8Scbn1VvzKWtwt0OrfvCk96HglTq5WnZRxkM
12+
5rartSQRuCuSE+JhWr5B4m6igrxtkYNty9xqGdRdpoaPH8LB/9xYy0pRLNFTHf5r
13+
UybQebE+NDgVL0oyq8DWb4CTdZ1Wae15XXzqCYt5J8ECgYEA7Ia/NqlZn2iITZWm
14+
T7nIhscEl2Lrwdl0L12aVmlrtcQgAU6XeCrh9G4Lm1J6hv19+bBUkWWNdaWP5lxb
15+
DQ0elXmHlKwAb+cwVSbZ95nKz3Uy6t7weblS12xZKw/FwxgOz7brXYpnx6/p1f2L
16+
qDsJAjT0GY7FVDsVffLm5xiVBK8CgYEAzFjUCok6QIYz4bkifrKsvaw4Gw9JgdJx
17+
rxcm5Xd6Q5qYxtEUYNGUluhoumKdgfIMxrweqw8TuwfwYwDRXA4L6advVw+Xe0O2
18+
hX3cixE0npZpgxMcweip7QCTssp123p6HEcMHObaU+i+O9S1eA3TTCqd40dVF7Zl
19+
TAohmc/LvMsCgYBGcQL1ho4YeYtOf+keCVh9OzxU0bMg8mA10wyp+4+GfLiDayKV
20+
OUA+CaAPTAsNtOUVvbwR6Uqt5PbsRkkfo+6d2anVTzx6F0I/uehkYzsRefgGFwtL
21+
VTQk0DHmLzZYmgufNPz3yMaLpApiHra/DYXrUFX6XpjKMyZ9ch/uZ1XKJQKBgQCF
22+
gIMHXx/vh73delZO7+xq/lipVRNw/UvIWBfRUn1OLXIicfYeSs4IyU2id0rv2nL+
23+
Y2il2PPK/STPiXk96u9dd0YGWulcXqCgFdpAAL2f3iSQvavMA3UAoZ/c7uiQuzOL
24+
xd7kAu4gY63k6NKl3GJvIGiGU9QD6eXEB9pr4pX4gQKBgHAeduYtgyeGFbiElnXy
25+
v6KG6l5Isf25VhwPnCJUTlHL/Y9Igo6VVVjN/iUrxBWjwhUa7/GyCOSLXVmMdpAF
26+
5hm9r7ykJFGL+eP9u8q4pgjeBwXMfXuKHnLptPA5U5aIo3gvN5azzlRwzZq+tOh0
27+
gv6XUAdjAl/eQRmAqnoCStSt
2828
-----END PRIVATE KEY-----

package-lock.json

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vite_project/package-lock.json

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)