Skip to content

Commit 5afbb31

Browse files
authored
Dpop (#100)
* Add ExperimentalTooltip for DPoP support in OIDC documentation - Integrated ExperimentalTooltip component in oidc.mdx, scopes.mdx, request.mdx, and token.mdx files to provide additional context for DPoP-related features. - Updated documentation to clarify the use of DPoP scope and its implications for ID tokens and authentication requests. - Enhanced user understanding of cryptographic binding and key management in OpenID Connect. * Add ExperimentalTooltip component and update sitemap timestamps - Introduced a new ExperimentalTooltip component for enhanced user interaction and context in the documentation. - Updated lastmod timestamps in sitemap.xml and ai-sitemap.xml to reflect the latest changes as of August 15, 2025, ensuring improved SEO and crawler efficiency. * Update OIDC token documentation with new ID token example and claims - Revised the ID token example to include updated claims and a new `cnf` structure for DPoP support. - Adjusted the `alg`, `typ`, and `kid` fields in the token header for clarity and accuracy. - Enhanced the payload section with a new `tenant` claim and updated values for `nonce`, `jti`, `iat`, and `exp` to reflect current standards. * Update linkinator configuration and sitemap timestamps - Added "https://cursor.com/*" to the linkinator configuration for enhanced link validation. - Updated lastmod timestamps in sitemap.xml and ai-sitemap.xml to reflect the latest changes as of August 15, 2025, improving SEO and crawler efficiency.
1 parent fb3213a commit 5afbb31

File tree

8 files changed

+173
-89
lines changed

8 files changed

+173
-89
lines changed
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
import React, { useState } from 'react'
2+
3+
interface ExperimentalTooltipProps {
4+
placement?: 'top' | 'bottom' | 'left' | 'right'
5+
}
6+
7+
export const ExperimentalTooltip: React.FC<ExperimentalTooltipProps> = ({
8+
placement = 'top'
9+
}) => {
10+
const [isVisible, setIsVisible] = useState(false)
11+
12+
const getTooltipPosition = () => {
13+
switch (placement) {
14+
case 'bottom':
15+
return 'top-full left-1/2 transform -translate-x-1/2 mt-1'
16+
case 'left':
17+
return 'right-full top-1/2 transform -translate-y-1/2 mr-1'
18+
case 'right':
19+
return 'left-full top-1/2 transform -translate-y-1/2 ml-1'
20+
default: // top
21+
return 'bottom-full left-1/2 transform -translate-x-1/2 mb-1'
22+
}
23+
}
24+
25+
const getArrowPosition = () => {
26+
switch (placement) {
27+
case 'bottom':
28+
return 'bottom-full left-1/2 transform -translate-x-1/2 border-l-transparent border-r-transparent border-t-transparent border-b-gray-800'
29+
case 'left':
30+
return 'left-full top-1/2 transform -translate-y-1/2 border-t-transparent border-b-transparent border-r-transparent border-l-gray-800'
31+
case 'right':
32+
return 'right-full top-1/2 transform -translate-y-1/2 border-t-transparent border-b-transparent border-l-transparent border-r-gray-800'
33+
default: // top
34+
return 'top-full left-1/2 transform -translate-x-1/2 border-l-transparent border-r-transparent border-b-transparent border-t-gray-800'
35+
}
36+
}
37+
38+
return (
39+
<span
40+
className="relative inline-block"
41+
onMouseEnter={() => setIsVisible(true)}
42+
onMouseLeave={() => setIsVisible(false)}
43+
aria-label="tooltip"
44+
>
45+
<svg
46+
xmlns="http://www.w3.org/2000/svg"
47+
viewBox="0 0 24 24"
48+
fill="currentColor"
49+
className="-mt-3 inline h-3 w-3"
50+
>
51+
<path
52+
fillRule="evenodd"
53+
d="M10.5 3.798v5.02a3 3 0 0 1-.879 2.121l-2.377 2.377a9.845 9.845 0 0 1 5.091 1.013 8.315 8.315 0 0 0 5.713.636l.285-.071-3.954-3.955a3 3 0 0 1-.879-2.121v-5.02a23.614 23.614 0 0 0-3 0Zm4.5.138a.75.75 0 0 0 .093-1.495A24.837 24.837 0 0 0 12 2.25a25.048 25.048 0 0 0-3.093.191A.75.75 0 0 0 9 3.936v4.882a1.5 1.5 0 0 1-.44 1.06l-6.293 6.294c-1.62 1.621-.903 4.475 1.471 4.88 2.686.46 5.447.698 8.262.698 2.816 0 5.576-.239 8.262-.697 2.373-.406 3.092-3.26 1.47-4.881L15.44 9.879A1.5 1.5 0 0 1 15 8.818V3.936Z"
54+
clipRule="evenodd"
55+
/>
56+
</svg>
57+
58+
{isVisible && (
59+
<div
60+
className={`absolute z-50 px-2 py-1 text-xs text-white bg-gray-800 rounded shadow-lg whitespace-nowrap ${getTooltipPosition()}`}
61+
>
62+
Experimental
63+
<div
64+
className={`absolute w-0 h-0 border-4 ${getArrowPosition()}`}
65+
/>
66+
</div>
67+
)}
68+
</span>
69+
)
70+
}

linkinator.config.json

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
"http://localhost:3000",
88
"https://blog.hello.dev/*",
99
"https://blog.hello.coop/*",
10-
"https://github.com/*"
10+
"https://github.com/*",
11+
"https://cursor.com/*"
1112
]
12-
}
13+
}

pages/docs/oidc.mdx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { Cards, Card } from 'nextra/components'
22
import { AuthRequestIcon, AuthResponseIcon, IDTokenIcon, ConfigIcon, ErrorIcon, VerificationIcon } from 'components/icons'
3+
import { ExperimentalTooltip } from 'components/experimental-tooltip'
34

45
# OpenID Connect
56

@@ -9,6 +10,8 @@ The section of the documentation describes Hellō implementation of OpenID Conne
910

1011
The Hellō OpenID Configuration is at [https://issuer.hello.coop/.well-known/openid-configuration](https://issuer.hello.coop/.well-known/openid-configuration).
1112

13+
Hellō also supports [OpenID Connect Key Binding](https://github.com/dickhardt/openid-key-binding) <ExperimentalTooltip /> for cryptographically bound ID tokens using RFC 9449 DPoP.
14+
1215
NOTE: The Hellō Issuer is `https://issuer.hello.coop` and is NOT `https://wallet.hello.coop`. This simplifies a separation of concerns per the [Hellō Protocol]()
1316

1417
<Cards>

pages/docs/oidc/request.mdx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { Callout } from 'nextra/components'
2+
import { ExperimentalTooltip } from 'components/experimental-tooltip'
23

34
# Authentication Request
45

@@ -31,6 +32,7 @@ The **request URL** is `https://wallet.hello.coop/authorize` and a query with th
3132
|`prompt`<br/>*optional*|A space delimited list. Accepted values include:|
3233
| | - `login` will require the user to re-authenticate at their login provider|
3334
| | - `consent` will require the user to review, and potentially change, released claims|
35+
|`dpop_jkt` <ExperimentalTooltip />|JWK Thumbprint of the DPoP public key using SHA-256. Required when using `dpop` scope.|
3436

3537
### Hellō Parameters
3638

pages/docs/oidc/token.mdx

Lines changed: 23 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import { ExperimentalTooltip } from 'components/experimental-tooltip'
2+
13
# ID Token
24

35
An ID Token is a JSON Web Token (JWT) [RFC 7519](https://www.rfc-editor.org/rfc/rfc7519.html) that has claims per [OpenID Connect §2](https://openid.net/specs/openid-connect-core-1_0.html#IDToken).<br/>In the following example of a raw ID Token:
@@ -8,39 +10,41 @@ An ID Token is a JSON Web Token (JWT) [RFC 7519](https://www.rfc-editor.org/rfc/
810
### Compact Format
911

1012
```ansi
11-
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IjIwMjQtMDctMDRUMjI6MjA6MzkuMjg2Wl8xZTAYTIzIn00.ey
12-
Jpc3MiOiJodHRwczovL2lzc3Vlci5oZWxsby5jb29wIiwiYXVkIjoiYXBwX0hlbGxvRGV2ZWxvcGVyUGxheWdyb3VuZF9Jc
13-
TIiLCJub25jZSI6IjE4OTM4Nzc4ODk0MjMyMzE5NTEiLCJqdGkiOiJqdGlfd0ZHdWdpQXp1WVBxTkh2ajJuUnI2enhvX0lq
14-
biIsInN1YiI6IjI2NWE1NmEzLWFjMDQtNDcxYy04MzJlLTVlMTZhNzRlYjFmMSIsIm5hbWUiOiJEaWNrIEhhcmR0IiwicGl
15-
jdHVyZSI6Imh0dHBzOi8vcGljdHVyZXMuaGVsbG8uY29vcC9yLzdjOWFlMTkyLTM2M2MtNDA5ZS05NDVhLWYyNWU1ODMzZT
16-
M3NS5qcGVnIiwiZW1haWwiOiJkaWNrLmhhcmR0QGdtYWlsLmNvbSIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJpYXQiOjE3M
17-
jk3MDkwNjcsImV4cCI6MTcyOTcwOTM2N30.NT8d0wSuHqmcaUbiKPYAusalMYJcGj8w726pE8WvfYwlDtms3tMovj7U9eGTwqQykf_tlbz
18-
IrJ4m6KofsriScGrm_2RAiaZTfk3srbWu21WhaLxqHhkbqu0lntNzkgVCjROv_CQ5YcsXh4L0aAJmKpkL3lVATMQSMxBUY0
19-
bnmDT5jKO2ldxse4WAGSYssSUy1O6YzsjcvRpL3shuTYNkx2NMrqBO2kdTEuFL3IeH8cRFI6x52w7TJKJXs0n8qRVdaul64
20-
URRrQrhTidVfCdFwswdrUZ3pdyhiTLlhC9Kn9Dtk5F3KVd0SEuzcb9cBJzNvV-vO-j7b-siqUJV4du3Q
13+
eyJhbGciOiJSUzI1NiIsInR5cCI6ImRwb3AraWRfdG9rZW4iLCJraWQiOiIyMDI1LTAxLTE1VDE2OjU2OjQ5LjY2OFpfNzM1LTFjNSJ9.eyJpc3MiOiJodHRwczovL2lzc3Vlci5oZWxsby5jb29wIiwiYXVkIjoiYXBwX0hlbGxvRGV2ZWxvcGVyUGxheWdyb3VuZF9JcTIiLCJub25jZSI6ImZhMzI5NGY4LTIyMmEtNDcwMS04YmUyLWY1Y2YwZDY1NThmZSIsImp0aSI6Imp0aV9wdXNLQjFZcjhRUk9qQ0FqbGVoNU1yZDFfWmZSIiwic3ViIjoiMjY1YTU2YTMtYWMwNC00NzFjLTgzMmUtNWUxNmE3NGViMWYxIiwidGVuYW50IjoicGVyc29uYWwiLCJuYW1lIjoiRGljayBIYXJkdCIsInBpY3R1cmUiOiJodHRwczovL3BpY3R1cmVzLmhlbGxvLmNvb3AvYXZhdGFyLzFjOGNlMzZlMDczNWFhY2ViYmUyZDUxNjk0ODJjODY3P3M9MjU2LGQ9aWRlbnRpY29uIiwiZW1haWwiOiJkaWNrLmhhcmR0QGdtYWlsLmNvbSIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJpYXQiOjE3NTUyNDkzMTQsImV4cCI6MTc1NTI0OTYxNCwiY25mIjp7Imp3ayI6eyJrdHkiOiJFQyIsImNydiI6IlAtMjU2IiwieCI6IkxBT25iQU1FRWROYS16UzFoeG9WWTVIZkp5aWFLRlNIVjVfRWJBY0lBdDQiLCJ5IjoiUDh1QkliNmYxX2VQUU13QjcwS0lVaEowV2pXdjJQQ1BLcjJwVlhpTndROCJ9fX0.NT8d0wSuHqmlpvNCaNaQRSH-XSXg_YDKwJfprtpkr7L2DanDUhXRZ8uAlDyOdDXJm6weEXrHiq9UQC8WGatmQ8V__jeTntPe8njID3MrfSY5jtS3AATfACC8oOqt_NPExW3noKBMjzLP50aa8JPBdu39YBnfOA78tL4K0GcCNDk9ctKf8dJktb4URnl4n7yYpJ_VCFp44bujpoxyr-SXBzZn8Zo2PY0oOApnAICiLs0iS9KhAegEP55Vo4m9Y2uER7YtIGA2S1iUwBbgx0XoFeIn4jQtMNydaksmbPqZFtAFNUKUM85KFnKAx_OMrhqEU0b3lc4kbR1Na_orr4Ucm1e-_pYk_UlOg
2114
```
2215

2316
### Decoded ID Token
2417

18+
Note: The following example includes the `cnf` claim that appears when the `dpop` scope is requested:
19+
2520
```json
2621
{
2722
"header": {
28-
"alg":"RS256",
29-
"typ":"JWT",
30-
"kid":"2024-07-04T22:20:39.286Z_1e0-a23"
23+
"alg": "RS256",
24+
"typ": "dpop+id_token",
25+
"kid": "2025-01-15T16:56:49.668Z_735-1c5"
3126
},
3227
"payload": {
3328
"iss": "https://issuer.hello.coop",
3429
"aud": "app_HelloDeveloperPlayground_Iq2",
35-
"nonce": "1893877889423231951",
36-
"jti": "jti_wFGugiAzuYPqNHvj2nRr6zxo_Ijn",
30+
"nonce": "fa3294f8-222a-4701-8be2-f5cf0d6558fe",
31+
"jti": "jti_pusKB1Yr8QROjCAjleh5Mrd1_ZfR",
3732
"sub": "265a56a3-ac04-471c-832e-5e16a74eb1f1",
33+
"tenant": "personal",
3834
"name": "Dick Hardt",
39-
"picture": "https://pictures.hello.coop/r/7c9ae192-363c-409e-945a-f25e5833e375.jpeg",
35+
"picture": "https://pictures.hello.coop/avatar/1c8ce36e0735aacebbe2d5169482c867?s=256,d=identicon",
4036
"email": "dick.hardt@gmail.com",
4137
"email_verified": true,
42-
"iat": 1729709067,
43-
"exp": 1729709367
38+
"iat": 1755249314,
39+
"exp": 1755249614,
40+
"cnf": {
41+
"jwk": {
42+
"kty": "EC",
43+
"crv": "P-256",
44+
"x": "LAOnbAMEEdNa-zS1hxoVY5HfJyiaKFSHV5_EbAcIAt4",
45+
"y": "P8uBIb6f1_ePQMwB70KIUhJ0WjWv2PCPKr2pVXiNwQ8"
46+
}
47+
}
4448
}
4549
}
4650
```
@@ -87,3 +91,4 @@ URRrQrhTidVfCdFwswdrUZ3pdyhiTLlhC9Kn9Dtk5F3KVd0SEuzcb9cBJzNvV-vO-j7b-siqUJV4du3Q
8791
|`iat`|The time the ID Token was issued in [Epoch time](https://en.wikipedia.org/wiki/Unix_time)|
8892
|`exp`|The time the ID Token expires.<br/>Hellō sets the expiry to be 5 minutes (300 seconds) after `iat`|
8993
|`tenant`|The Hellō identifier for the organization. Similar to `sub`, use this to identify the organization. Set to `personal` for personal accounts.|
94+
|`cnf` <ExperimentalTooltip />|Confirmation claim containing the public key bound to the ID token when using `dpop` scope.|

pages/docs/scopes.mdx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { Callout } from 'nextra/components'
2+
import { ExperimentalTooltip } from 'components/experimental-tooltip'
23

34
# Hellō Scopes
45

@@ -35,6 +36,8 @@ Following are the scopes currently supported by Hellō. At the top are the stand
3536
|`phone`|A verified `phone_number` claim. <br/>`phone_number_verified=true` will always be returned. <br/>*see note below*|
3637
|`picture`|A URL to a profile picture. [See FAQ 13](/faqs/#13-what-can-i-do-with-the-picture-url-i-receive) for details|
3738
|`profile`|equivalent to `name`, `email`, and `picture`|
39+
|**Experimental**|**The following scopes are currently experimental**|
40+
|`dpop` <ExperimentalTooltip/>|Enables key binding for ID tokens using RFC 9449 DPoP.|
3841

3942
*NOTE: We previously returned `phone` and `phone_verified` claims and now return `phone_number` and `phone_number_verified` claims per [OIDC Standard Claims](https://openid.net/specs/openid-connect-core-1_0.html#StandardClaims)*
4043

public/ai-sitemap.xml

Lines changed: 26 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -6,157 +6,157 @@
66

77
<url>
88
<loc>https://www.hello.dev/markdown/docs/docs.md</loc>
9-
<lastmod>2025-08-04T17:39:20.481Z</lastmod>
9+
<lastmod>2025-08-15T09:26:48.888Z</lastmod>
1010
<priority>1.0</priority>
1111
</url>
1212

1313
<url>
1414
<loc>https://www.hello.dev/markdown/docs/docs/admin-mcp.md</loc>
15-
<lastmod>2025-08-04T17:39:20.481Z</lastmod>
15+
<lastmod>2025-08-15T09:26:48.888Z</lastmod>
1616
<priority>0.7</priority>
1717
</url>
1818

1919
<url>
2020
<loc>https://www.hello.dev/markdown/docs/docs/apis/admin.md</loc>
21-
<lastmod>2025-08-04T17:39:20.481Z</lastmod>
21+
<lastmod>2025-08-15T09:26:48.888Z</lastmod>
2222
<priority>0.8</priority>
2323
</url>
2424

2525
<url>
2626
<loc>https://www.hello.dev/markdown/docs/docs/apis/invite.md</loc>
27-
<lastmod>2025-08-04T17:39:20.481Z</lastmod>
27+
<lastmod>2025-08-15T09:26:48.888Z</lastmod>
2828
<priority>0.8</priority>
2929
</url>
3030

3131
<url>
3232
<loc>https://www.hello.dev/markdown/docs/docs/apis/quickstart.md</loc>
33-
<lastmod>2025-08-04T17:39:20.481Z</lastmod>
33+
<lastmod>2025-08-15T09:26:48.888Z</lastmod>
3434
<priority>0.8</priority>
3535
</url>
3636

3737
<url>
3838
<loc>https://www.hello.dev/markdown/docs/docs/apis/wallet.md</loc>
39-
<lastmod>2025-08-04T17:39:20.481Z</lastmod>
39+
<lastmod>2025-08-15T09:26:48.888Z</lastmod>
4040
<priority>0.8</priority>
4141
</url>
4242

4343
<url>
4444
<loc>https://www.hello.dev/markdown/docs/docs/apis/web-client.md</loc>
45-
<lastmod>2025-08-04T17:39:20.481Z</lastmod>
45+
<lastmod>2025-08-15T09:26:48.888Z</lastmod>
4646
<priority>0.8</priority>
4747
</url>
4848

4949
<url>
5050
<loc>https://www.hello.dev/markdown/docs/docs/buttons.md</loc>
51-
<lastmod>2025-08-04T17:39:20.481Z</lastmod>
51+
<lastmod>2025-08-15T09:26:48.888Z</lastmod>
5252
<priority>0.8</priority>
5353
</url>
5454

5555
<url>
5656
<loc>https://www.hello.dev/markdown/docs/docs/getting-started.md</loc>
57-
<lastmod>2025-08-04T17:39:20.481Z</lastmod>
57+
<lastmod>2025-08-15T09:26:48.888Z</lastmod>
5858
<priority>0.9</priority>
5959
</url>
6060

6161
<url>
6262
<loc>https://www.hello.dev/markdown/docs/docs/quickstarts.md</loc>
63-
<lastmod>2025-08-04T17:39:20.481Z</lastmod>
63+
<lastmod>2025-08-15T09:26:48.888Z</lastmod>
6464
<priority>0.9</priority>
6565
</url>
6666

6767
<url>
6868
<loc>https://www.hello.dev/markdown/docs/docs/quickstarts/express.md</loc>
69-
<lastmod>2025-08-04T17:39:20.481Z</lastmod>
69+
<lastmod>2025-08-15T09:26:48.888Z</lastmod>
7070
<priority>0.8</priority>
7171
</url>
7272

7373
<url>
7474
<loc>https://www.hello.dev/markdown/docs/docs/quickstarts/fastify.md</loc>
75-
<lastmod>2025-08-04T17:39:20.481Z</lastmod>
75+
<lastmod>2025-08-15T09:26:48.888Z</lastmod>
7676
<priority>0.8</priority>
7777
</url>
7878

7979
<url>
8080
<loc>https://www.hello.dev/markdown/docs/docs/quickstarts/nextjs.md</loc>
81-
<lastmod>2025-08-04T17:39:20.481Z</lastmod>
81+
<lastmod>2025-08-15T09:26:48.888Z</lastmod>
8282
<priority>0.8</priority>
8383
</url>
8484

8585
<url>
8686
<loc>https://www.hello.dev/markdown/docs/docs/quickstarts/wordpress.md</loc>
87-
<lastmod>2025-08-04T17:39:20.481Z</lastmod>
87+
<lastmod>2025-08-15T09:26:48.888Z</lastmod>
8888
<priority>0.8</priority>
8989
</url>
9090

9191
<url>
9292
<loc>https://www.hello.dev/markdown/docs/docs/scopes.md</loc>
93-
<lastmod>2025-08-04T17:39:20.481Z</lastmod>
93+
<lastmod>2025-08-15T09:26:48.888Z</lastmod>
9494
<priority>0.8</priority>
9595
</url>
9696

9797
<url>
9898
<loc>https://www.hello.dev/markdown/docs/docs/sdks/config.md</loc>
99-
<lastmod>2025-08-04T17:39:20.481Z</lastmod>
99+
<lastmod>2025-08-15T09:26:48.888Z</lastmod>
100100
<priority>0.7</priority>
101101
</url>
102102

103103
<url>
104104
<loc>https://www.hello.dev/markdown/docs/docs/sdks/environment.md</loc>
105-
<lastmod>2025-08-04T17:39:20.481Z</lastmod>
105+
<lastmod>2025-08-15T09:26:48.888Z</lastmod>
106106
<priority>0.7</priority>
107107
</url>
108108

109109
<url>
110110
<loc>https://www.hello.dev/markdown/docs/docs/sdks/express.md</loc>
111-
<lastmod>2025-08-04T17:39:20.481Z</lastmod>
111+
<lastmod>2025-08-15T09:26:48.888Z</lastmod>
112112
<priority>0.7</priority>
113113
</url>
114114

115115
<url>
116116
<loc>https://www.hello.dev/markdown/docs/docs/sdks/faqs.md</loc>
117-
<lastmod>2025-08-04T17:39:20.481Z</lastmod>
117+
<lastmod>2025-08-15T09:26:48.888Z</lastmod>
118118
<priority>0.7</priority>
119119
</url>
120120

121121
<url>
122122
<loc>https://www.hello.dev/markdown/docs/docs/sdks/fastify.md</loc>
123-
<lastmod>2025-08-04T17:39:20.481Z</lastmod>
123+
<lastmod>2025-08-15T09:26:48.888Z</lastmod>
124124
<priority>0.7</priority>
125125
</url>
126126

127127
<url>
128128
<loc>https://www.hello.dev/markdown/docs/docs/sdks/helper.md</loc>
129-
<lastmod>2025-08-04T17:39:20.481Z</lastmod>
129+
<lastmod>2025-08-15T09:26:48.888Z</lastmod>
130130
<priority>0.7</priority>
131131
</url>
132132

133133
<url>
134134
<loc>https://www.hello.dev/markdown/docs/docs/sdks/nextjs.md</loc>
135-
<lastmod>2025-08-04T17:39:20.481Z</lastmod>
135+
<lastmod>2025-08-15T09:26:48.888Z</lastmod>
136136
<priority>0.7</priority>
137137
</url>
138138

139139
<url>
140140
<loc>https://www.hello.dev/markdown/docs/docs/sdks/quickstart.md</loc>
141-
<lastmod>2025-08-04T17:39:20.481Z</lastmod>
141+
<lastmod>2025-08-15T09:26:48.888Z</lastmod>
142142
<priority>0.7</priority>
143143
</url>
144144

145145
<url>
146146
<loc>https://www.hello.dev/markdown/docs/docs/sdks/react.md</loc>
147-
<lastmod>2025-08-04T17:39:20.481Z</lastmod>
147+
<lastmod>2025-08-15T09:26:48.888Z</lastmod>
148148
<priority>0.7</priority>
149149
</url>
150150

151151
<url>
152152
<loc>https://www.hello.dev/markdown/docs/docs/sdks/svelte.md</loc>
153-
<lastmod>2025-08-04T17:39:20.481Z</lastmod>
153+
<lastmod>2025-08-15T09:26:48.888Z</lastmod>
154154
<priority>0.7</priority>
155155
</url>
156156

157157
<url>
158158
<loc>https://www.hello.dev/markdown/docs/docs/sdks/vue.md</loc>
159-
<lastmod>2025-08-04T17:39:20.481Z</lastmod>
159+
<lastmod>2025-08-15T09:26:48.888Z</lastmod>
160160
<priority>0.7</priority>
161161
</url>
162162

0 commit comments

Comments
 (0)