97fd503849cda669ee4902e0af72318a056ba820b19a1841bf1b2718dc5f5292  ./.env.example
c479229cb6280252f7f8018f659cee9f8a7050d505ffb1a7fa98d0fe39083a55  ./.gitignore
1f2161ece6ef6da129a447dc66263d3474ac06574e77496d7fcc3ea5192a88de  ./API_REFERENCE.md
67c2c0936d93a3c4edd2243f9e268865e427ec34eca1dddcbafc36dfdf7133b2  ./ARCHITECTURE.md
86e0679ca45f81143ecb547abf053520b321a47b6a1d9c727cac9feb0f862193  ./BUILD_VALIDATION.md
b6bd9f2edb128475acb18abfd6396bdde958b8be31619d36b9c32cbb80e78a70  ./CLOUDFLARE_RULES.md
965c06df5c04b4e16bb7a97f2d1c1d5bc966aaa51c2621e1c5479ea88c796b45  ./DEVELOPMENT_ROADMAP.md
384f75242c9ad7be2d916e60e0da91da14b746c92daa2dec7247cb3c8212314c  ./INSTALLER_MANIFEST.json
54a092f600ec323bb51eb428807b7be1dd22f5c8fdd907a5b83624ee7251b41e  ./INSTALL_CLOUDFLARE_CPANEL.md
65e0072485fa28f231ba8d60eded6e064676ae806e8732e4ef3fe14f01d42217  ./LICENSE.txt
2eb49abf4900960632ee8aeb7f347a2c8ae37bf79b1df955e75a46fe253be15e  ./README.md
fef48799ec1c0a87f66efe55e30eb3be4e95eb3e354b70d612ea1db9d83323bd  ./RELEASE_NOTES.md
1fd28b4a652a5ec5429b6af5cf2b6f03561d336d175364878107c35362d1b254  ./SECURITY.md
cef0e1a27f4757bd12c5cd58fdd0853ce62d74ade16ace8bbdd06bd7fd449133  ./TEST_CHECKLIST.md
66d339f0c45e7828930c3c43f49ddcf403a96e7b269234b592f15e3b2619704d  ./THIRD_PARTY_NOTICES.txt
2cb5135d2e92519eff43a0f4c5f630685b2e5292382cf7783aab138d8f8c7de7  ./VERSION.txt
c48ad6ba60011a48ef660da344741b6999ad15025a77c74bc5dda893e287fec8  ./app.js
5ae75a7f87f1dab503e05af445ee0d673b43581ad2e12c8a32cd27b58f5b7bbb  ./app/access/[code]/page.jsx
694acb0321aace0f1f30ef07b3cde0f934625196cef657e565ba82fb44fd0f0a  ./app/admin/qr/page.jsx
758dc20c3d39b2ebed5b883733b240aca97bb176a3fbc8b8274bbf4bb8b0fee2  ./app/api/admin/qr/route.js
c21d383e204f91e290284f599445478e4fc3037b9d54befa6a34680b1e335d48  ./app/api/auth/logout/route.js
aa65d7e18457a33feb360c275e860dd1cdfcd96d36f957049c3e3b5bf4747a4e  ./app/api/auth/request-code/route.js
6388c458234dac1278e75ed048255030120f1a19e19bffff3ce48850efd0565d  ./app/api/auth/verify-code/route.js
2593a354d933428057e9bbbf44336b713305cdd3908806e781814ec4a49f2444  ./app/api/health/route.js
eb858f01e130f119d54a013e56393c0690b13e18fb4b8eb02e16d48304b2a564  ./app/api/qr/[code]/png/route.js
15efd102003ebfe57d97a0a04e39573c92b2d1331e6d30b302c737d2013f03dc  ./app/api/qr/[code]/svg/route.js
2d7e585423caede178e35fb775f0cea5cbcfe488a9aadb508ba0b1f193d2723b  ./app/api/stories/[id]/route.js
09fe8a559cebde30335cd7e0472542d0701fbe034f953723dd7d7fcab8be1f62  ./app/api/stories/route.js
d2829ecbc0a8ea521298d06fa6d4788756481e6351d473bf3a99448c325b231b  ./app/api/uploads/complete/route.js
7fcf17afb6bcb0d354a640a3937267770c1e6b4e2738b763bd0bdb52426882aa  ./app/api/uploads/presign/route.js
0dc4bc8f2be995d502c55ad7a4d239e523b13c6c46c1ef36b5b2f294d32e9e38  ./app/connect/[code]/page.jsx
ab536345b1f14dc3d694d46c2332241486c92d73ebb8f3fa310a50ad3361495c  ./app/dashboard/page.jsx
e7c2fd81a43d20b305e1449faede380ce7f3294b799a9b0af90cd0ae769ac43b  ./app/dashboard/story/[id]/page.jsx
c5b172a1a2bbd4bcdc30a058856426c95f8206fdd1d9e1025ad73d851e76bb82  ./app/globals.css
1393411fcfea19b5c10fca077927baf378eea0eb948f539c49d1cefbe396e380  ./app/layout.jsx
30273cb35b7afa3bd8e81a31275bf100a83c07bdf9d7d2d267c27d3a634c0f14  ./app/login/page.jsx
0ac207afeaa9f5746bb9ab6824a4a64e962d97662bd17586ce667573c2c56858  ./app/not-found.jsx
1378188e502303ecdca01154b0630ca8be7bd55e608502732afca8ac118a338c  ./app/onboarding/page.jsx
bf1927d009cb826375367bac3e0e9ed8a4210d04d7a8f8ea07d2f0b918087052  ./app/page.jsx
7388cf5b9ca94e87a9b4b3aaedbd3add2037a517cc6b82bdb46662d71928bec8  ./app/privacy/page.jsx
57f08e7cc95891df17cbfd1ddaa3da24a09d0fcc84cd9c122865810ef36b941d  ./app/q/[code]/page.jsx
d19126eb2879163e51337798c830dd091c1d98eac9a442eb1b7df3c0972bdb41  ./app/robots.js
61b3defd0f7093349f2b4c10124891694dc4dd8539e7d5fe16ed3e9d3ecba45e  ./app/sample-story/page.jsx
dd1ec5e53d8934c0189bbbaef7be81458c0bca0686dd7b42f18fb2a9632fc79c  ./app/sitemap.js
a877580b193ae46cf8f518ed2c1a5bdb0bfde31aa7ae6dee1badcde8ffd1cd3c  ./app/story/[slug]/page.jsx
000d4df7160586aecbe963bff4e870dae95f0caf5bb23ee1b8a0f16a5f4fc517  ./app/terms/page.jsx
e0d014969cc041203b313fddf6a0967462e76831700b14b421c8046304a2be9d  ./components/AuthCodeForm.jsx
96e5e66c25561ef7d0a98555196148b595e7a9baf4e3b24928604087eecc4ab3  ./components/CoverUploader.jsx
c134613a5b15ecf518cf97d88d9af5fbec4976b0b745c6d5c538201d9cfdb7c4  ./components/Logo.jsx
1ac9ea05ab99a5073889673061d1d78c30a8b6d8a7437dc8f47af612949ebb84  ./components/LogoutButton.jsx
6fb2347ad29b4d8e7f1f634566532f58ce8656874a019f5731d73775c1484ae2  ./components/OnboardingForm.jsx
af39e2c4244e36e2a86435d7f004ea300ce0673e037eb099ce571ee8211aecf1  ./components/QrBatchStudio.jsx
43a976d4d0ae7cbcc7b1bf93febe573c0712bf6d76f68b538bdb30e9754621d0  ./components/SiteFooter.jsx
b077939b3e5ca9496e0e92ba5feda649dc2afbd9257c57a3eef72e3236f81611  ./components/SiteHeader.jsx
3b1cc2ca1670f5b64717b172870dcbfc0adc661f9ad20ad582e32d9e2be1624b  ./components/StoryEditorForm.jsx
c32564b6c9c6439b9aa516b8e0fe9f6b96f0eb25f3fba7f8c6e69fe33d602735  ./components/TurnstileWidget.jsx
427893e2f9fb008191f613ab969db7d5aac3a08b2f442bb3d0441ad3b9e40f9f  ./jsconfig.json
dee98d56d761cc5fe5f7b81539026a79fcb59ec0bdf93d73c3881ea2aebe1c3f  ./lib/audit.js
ea48a9fecd398340642e7aa6bacc8b6b45633ba83aa5770a06e721865a15749a  ./lib/auth.js
71f875c1036739a8f5fcd7316d845606a7ac5c6ce0e174d0eac8bbb9395efb4e  ./lib/claims.js
e01eee8f93e7e20122f3c5972191c14b6eb5acfc3333db7bc17c6da7b85909e1  ./lib/crypto.js
31ff1f30089104e1a07f21a3e4ad391765b8361578032a392d13c436d7d8d2f3  ./lib/db.js
93269118813da972c125bb442b62a777205e0583597cec7007336c74a612041d  ./lib/email.js
cd3f1bbbb0d52a5752e416e0c50321d12b7676fd9dc06aa078ea84adbffda307  ./lib/env.js
316751f4643cf89b04e18ba2a243b794392da4f1eb8e37d3bf5d6150e6b32c19  ./lib/permissions.js
24393310bdf3c573e64566d9e70b8259322b11c7fd07790527b2e322bd53c408  ./lib/r2.js
5252620d1b1b338b77da8b12285243b8c113e48ec3978d819d411f1c25b2ad1c  ./lib/rate-limit.js
820e99b357e768bbeeae55c93dcc02e8482c08b62dc046f2b02c09fc8bf6f550  ./lib/security.js
e325022309fa5d52d830b93d60d24141568338fe20b6be6bd459a6873535312d  ./lib/stories.js
658521d02c62e5cf4a05acdb6803f5b3fbe09d2d22ad89b2ea91b844ae42f154  ./lib/turnstile.js
c34435f62c5fb5cbc100e2c751eb7f30010c4f2855f4efc34a9d6309df95de7c  ./lib/validation.js
79d763eba2b62a1db2043e7fcca81e2846467b286f3c0e60c1e8b374ff77eb85  ./next.config.mjs
a6035de2c7e14e98de079689d5433207c40bfe9899a0cbc91db2044f98e21960  ./package.json
29209c065ca9bd91e17c275109d9d2a48065de72dbbc817ba14d749c0c15cea0  ./previews/Homepage-Visual-Direction.png
63145019f984f77e769c361ce864b44ce13f6f739dbca33b677f8a3896648c10  ./previews/QR-Studio-Visual-Direction.png
41c934b239713b925b39252ce3c06c3029fa0c223d26d7413249004c175efd78  ./previews/README.md
5b3a6cd8901573f22170ebfac5bdf3f3f2dbe1c7fe2e8f69cfeec3e83bd40bea  ./public/assets/family-generations.jpg
4185ef96b22dae90a5b49ee4db89d6f650bd2817425b050b9f26a2213d4f551f  ./public/assets/hero-portrait.jpg
e9d0f96528950be185cd2fe015d29e15dfc9e04e52aacf1340d4a0be6aa6fd4b  ./public/assets/memory-photos.jpg
322fdaf8ce051513ea40ec678c9fc8fa554bcafa797645cf758bb4436720fa4b  ./public/favicon.svg
4af8bac86ae8e02e3baaec9c8e8feb01c177d3857a1086026ef248e331826370  ./public/manifest.webmanifest
2e653bc0397c512ea84edb24857d552086ef4ff8ec605ae6a3d441ce67c6bcf4  ./r2-cors-production.json
60bf7a794e0a0856078caae2a55fdd85b204be076a322c9ac3627dec33249388  ./r2-cors-staging.json
7f98423772d008005419510a55d6fab4728dd829cf5cffd94a8319750b4f47fb  ./scripts/_load-env.mjs
02cd7f36ee0e1b467bf3356f4a50155c2f40db7f3346552d54e60cb5cd4dd7f3  ./scripts/check-env.mjs
07d1eafccfafa5b3b2871eb1354cc9bb9a0b5ee3f9301b68abd8a0413f5d99f6  ./scripts/cleanup-expired.mjs
5355fd989a872b89ca2eeee56d7999d0a81746e948134d7d9e70862c66b49258  ./scripts/create-qr-batch.mjs
49bc9c808fcf90f2773c4c3d969e070ad35e56d15f62fec6e8e71d86ed942d14  ./scripts/deploy-cpanel.sh
31ae7090f31f455a1d73b8f8cc24ac2ad7b9c2b31dea3ed32f17729984bb0e48  ./scripts/migrate.mjs
eafaf6449abe00994f2bc9a5556f334dd804488168914687aff8b8d1217df801  ./scripts/seed-admin.mjs
7dc613c826949259d7b045d1bafbcddc7e7884723533312724c77efa7684f2b0  ./sql/001_initial.sql
9d605e9e1a1f8dc0ddf57694f18e0fad5435f05711416812b017462f6ece1ee5  ./sql/002_story_prompts.sql
