Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
283 commits
Select commit Hold shift + click to select a range
9b22850
Add new script command to simulate transfers in Pretix integration, e…
didierkrux Feb 13, 2026
e26bb48
Enhance payment verification by adding support for token addresses, a…
didierkrux Feb 13, 2026
ff0317a
Update script commands in Pretix integration to use pnpm for executio…
didierkrux Feb 13, 2026
3802fb6
Add support for add-ons in fiat purchase flow, including interface up…
didierkrux Feb 13, 2026
6d238d6
Add variation support for add-ons in ticket purchase and fiat purchas…
didierkrux Feb 13, 2026
52fb8bc
test
lassejaco Feb 16, 2026
25d0bf7
lockfile conflict and dependencies
lassejaco Feb 16, 2026
33734be
image url
lassejaco Feb 16, 2026
ea5e8e1
quick test
lassejaco Feb 16, 2026
3faf39b
add new packages for self-verification, and enhance VerificationModal…
didierkrux Feb 16, 2026
b70e839
Replace dynamic voucher code generation with hardcoded Pretix voucher…
didierkrux Feb 16, 2026
dbe26ca
Add voucher validation and discount application in ticket purchase an…
didierkrux Feb 16, 2026
c011b56
Enhance order processing by adding variation name lookups and updatin…
didierkrux Feb 16, 2026
2079a3d
Refactor payment processing to utilize daimo_pay for order confirmati…
didierkrux Feb 17, 2026
1ef3254
Implement enhanced payment verification with auto-retry logic and add…
didierkrux Feb 17, 2026
601d138
update wallet addresses
didierkrux Feb 17, 2026
b4c3199
Refactor RPC transport handling in checkout, relayer, and x402 servic…
didierkrux Feb 17, 2026
4e2bb9d
Remove outdated project-specific rules
didierkrux Feb 18, 2026
c9e4b69
add shadcn
didierkrux Feb 18, 2026
571c92c
update tickets
didierkrux Feb 18, 2026
193146b
Add countdown banner image and update store layout
didierkrux Feb 18, 2026
9038e96
Refactor payment processing to utilize x402_crypto for order confirma…
didierkrux Feb 18, 2026
f85fad9
Enhance x402 payment integration by unifying `payment_info` structure…
didierkrux Feb 18, 2026
8f626c5
Update x402 README to reflect new payment options and multi-chain ver…
didierkrux Feb 18, 2026
5214155
Update dependencies and refactor wallet connection in x402 payment in…
didierkrux Feb 18, 2026
f11c696
quick meerkat mock
lassejaco Feb 19, 2026
59d7ccf
Merge branch 'dev' of https://github.com/efdevcon/monorepo into dev
didierkrux Feb 19, 2026
0897dfa
Refactor checkout component to improve readability and maintainabilit…
didierkrux Feb 19, 2026
7a8f68f
Add new script command for testing Pretix settings in package.json
didierkrux Feb 19, 2026
46f387a
Enhance ticket store functionality by filtering admission tickets bas…
didierkrux Feb 19, 2026
045cc52
add ticket log
didierkrux Feb 19, 2026
f0a7c3a
test forms
lassejaco Feb 19, 2026
5ffe66e
merge conflict, basic application tests
lassejaco Feb 19, 2026
3135700
Merge branch 'dev' of https://github.com/efdevcon/monorepo into dev
didierkrux Feb 20, 2026
169adb6
Refactor checkout component by removing fiat payment handling and rel…
didierkrux Feb 20, 2026
35486d6
Refactor blog data fetching by caching results and adding error handl…
didierkrux Feb 20, 2026
9ec0037
Import Head component from Next.js to enhance SEO capabilities in the…
didierkrux Feb 20, 2026
6cb291b
Update page title (failing deployement)
didierkrux Feb 20, 2026
f66d5c4
Add launch configuration for development environments in launch.json
didierkrux Feb 21, 2026
f4caeb6
Cache SELF voucher. Modify redemption link to utilize env variable fo…
didierkrux Feb 21, 2026
5294cfd
SELF AADHAAR conf
didierkrux Feb 21, 2026
a28259b
env conf based checkout URL
didierkrux Feb 21, 2026
b5982df
daimo_pay fallback
didierkrux Feb 21, 2026
0c45949
add smart wallet + agent support
didierkrux Feb 21, 2026
ddfa825
Add simplified ticket purchase endpoint and main purchase handler for…
didierkrux Feb 21, 2026
a9c2253
Enhance SelfVerificationModal and API to support staging environment …
didierkrux Feb 24, 2026
7f01da5
basic card test
lassejaco Feb 25, 2026
7473326
Merge branch 'dev' of github.com:efdevcon/monorepo into dev
lassejaco Feb 25, 2026
e0946db
dedupe og tags
lassejaco Feb 25, 2026
3fa65e2
add more og overrides
lassejaco Feb 25, 2026
9e1588a
base url
lassejaco Feb 25, 2026
ca86fe7
comment other tickets for now
didierkrux Feb 25, 2026
ed79534
update navigation
didierkrux Feb 25, 2026
1313347
Add self-logo SVG and update ticket store layout
didierkrux Feb 25, 2026
2f2122a
Add discount code handling and update ticket card layout for better u…
didierkrux Feb 25, 2026
fb93000
update SelfVerificationModal for improved styling and structure; add …
didierkrux Feb 25, 2026
8f162ea
Enhance VerificationModal styling for mobile responsiveness; adjust p…
didierkrux Feb 25, 2026
abc4936
Refactor StoreContent layout and styles for improved structure and re…
didierkrux Feb 25, 2026
8f41792
Refactor SelfVerificationModal to improve error handling and user fee…
didierkrux Feb 25, 2026
3b25b4c
Enhance SelfVerificationModal and redeem-self API for improved error …
didierkrux Feb 25, 2026
978fa72
Implement redeem card styling and layout adjustments for ticket redem…
didierkrux Feb 25, 2026
d2a99ec
claude conf
didierkrux Feb 27, 2026
93102ae
improve crypto + mobile checkout
didierkrux Feb 27, 2026
f0ba7e1
improve order ui
didierkrux Feb 27, 2026
f2eb414
Update settings.local.json to add new Bash commands for enhanced func…
didierkrux Feb 27, 2026
7ec12fa
Add powered by Stripe SVG and enhance checkout styles for improved UI/UX
didierkrux Feb 27, 2026
49dc592
Update settings.local.json to include additional Bash commands for im…
didierkrux Feb 27, 2026
6e0f092
Add Radix UI components and new Pretix setup script for attendee ques…
didierkrux Feb 27, 2026
f67ac7c
Add country selection and update ticket question structure in checkou…
didierkrux Feb 27, 2026
925418d
Add Input and Textarea components; refactor checkout form to utilize …
didierkrux Feb 27, 2026
79e9778
Refactor checkout component for improved readability and maintainabil…
didierkrux Feb 27, 2026
2252c7f
Pretix API optimization 1:
didierkrux Feb 27, 2026
fbfa864
Add retry mechanism with exponential backoff for critical Pretix API …
didierkrux Feb 27, 2026
5e90ca3
Refactor gap spacing in SCSS to use calc() for improved responsiveness
didierkrux Feb 27, 2026
164e76a
Enhance payment option display in checkout component by adding crypto…
didierkrux Feb 27, 2026
373034f
improve gas management + add limit:
didierkrux Feb 27, 2026
3d08e9b
Add dynamic discount codes and voucher assignment system
didierkrux Feb 27, 2026
78601ea
Update local settings to include additional Bash commands for enhance…
didierkrux Feb 27, 2026
954ad8e
ticket sharing first iteration
lassejaco Feb 28, 2026
63d5c77
Merge branch 'dev' of github.com:efdevcon/monorepo into dev
lassejaco Feb 28, 2026
369e6d6
gyro + mobile styling
lassejaco Feb 28, 2026
3d0b6f5
simplify url + polish + gyro fix attempted
lassejaco Mar 1, 2026
b1e8beb
gyrogyro
lassejaco Mar 1, 2026
6fb956b
polish
lassejaco Mar 1, 2026
e774f59
claude perm
didierkrux Mar 2, 2026
86e1af0
Enhance Tailwind configuration and update font styles
didierkrux Mar 2, 2026
244418e
update UI for Self modal + checkout page
didierkrux Mar 2, 2026
535c1f0
claude conf
didierkrux Mar 2, 2026
6d08bdc
update checkout + confirmation UI
didierkrux Mar 2, 2026
0944360
fixes
lassejaco Mar 2, 2026
05de9db
add claude skills
didierkrux Mar 2, 2026
31ba296
gyro issues
lassejaco Mar 2, 2026
15076e8
Merge branch 'dev' of github.com:efdevcon/monorepo into dev
lassejaco Mar 2, 2026
b35a947
add CLAUDE.md
didierkrux Mar 2, 2026
6fd7598
Enhance checkout and redeem UI components
didierkrux Mar 2, 2026
e93a70c
Refactor checkout UI styles and improve accessibility
didierkrux Mar 3, 2026
46b0810
Enhance checkout section validation and user feedback
didierkrux Mar 3, 2026
3d86d33
Implement dynamic crypto discount configuration across ticket purchas…
didierkrux Mar 3, 2026
77e12ab
Add country list for checkout component
didierkrux Mar 3, 2026
b537200
global changes (layout size, fonts, page styling, etc.), ticket page wip
lassejaco Mar 3, 2026
8cfe840
handle empty card
didierkrux Mar 3, 2026
1eb75ad
Merge branch 'dev' of https://github.com/efdevcon/monorepo into dev
didierkrux Mar 3, 2026
7ddb02b
Refactor ticket availability API endpoint
didierkrux Mar 3, 2026
20fc62a
claude conf
didierkrux Mar 3, 2026
2ac306a
Refactor ticketing configuration
didierkrux Mar 3, 2026
d1fb1a8
Update .gitignore to include local Claude settings and remove depreca…
didierkrux Mar 3, 2026
b936bd4
bigger dev banner
didierkrux Mar 3, 2026
2000bde
Refactor email validation across ticket purchase APIs and checkout co…
didierkrux Mar 3, 2026
36a3aad
Remove unused ERC20_ABI and direct payment execution logic from check…
didierkrux Mar 3, 2026
c07f880
chloe font, dips page update, basic static ticket page done
lassejaco Mar 3, 2026
3fa8bed
Refactor country data import in checkout component and add new countr…
didierkrux Mar 3, 2026
1eb3afd
Merge branch 'dev' of github.com:efdevcon/monorepo into dev
lassejaco Mar 3, 2026
0094dd9
Add x402Agents configuration and disable endpoints if not enabled
didierkrux Mar 3, 2026
8b1564e
Disable AnonAadhaar
didierkrux Mar 3, 2026
e5baf54
Refactor x402 Tickets Status API to require only paymentReference que…
didierkrux Mar 3, 2026
dac568a
footer, tickets page polish
lassejaco Mar 3, 2026
f1c4b59
Add validation for ticket and addon quantities in fiat purchase API. …
didierkrux Mar 3, 2026
767acc1
Merge branch 'dev' of https://github.com/efdevcon/monorepo into dev
didierkrux Mar 3, 2026
a6fe040
Add rate limiting for fiat purchase API based on client IP to prevent…
didierkrux Mar 3, 2026
23f3367
better mobile spacing
lassejaco Mar 3, 2026
0b36306
Refactor discount code handling in redeem-self API to improve race co…
didierkrux Mar 3, 2026
c2a5e18
Add discount collection configuration to ticketing setup and update d…
didierkrux Mar 3, 2026
e9855ff
Enhance ticketStore to include environment handling by adding 'env' p…
didierkrux Mar 3, 2026
2a27856
Enhance OrderConfirmationPage to support sharing by adding an optiona…
didierkrux Mar 3, 2026
a088483
Merge branch 'dev' of github.com:efdevcon/monorepo into dev
lassejaco Mar 3, 2026
a519f79
spacing mobile
lassejaco Mar 3, 2026
f9fa1ed
x402 Admin
didierkrux Mar 3, 2026
8d0b698
Merge branch 'dev' of https://github.com/efdevcon/monorepo into dev
didierkrux Mar 3, 2026
1f2bfdc
Add gas cost tracking to ticket verification and purchase processes
didierkrux Mar 3, 2026
966abf6
fix ts issue
didierkrux Mar 3, 2026
fc0ee1f
fix ts
didierkrux Mar 3, 2026
856864f
conditionally render environment message on store page
didierkrux Mar 3, 2026
6f6424f
tickets page polish
lassejaco Mar 4, 2026
aba9c8c
Merge branch 'dev' of github.com:efdevcon/monorepo into dev
lassejaco Mar 4, 2026
fd12eff
gyro adjustments
lassejaco Mar 4, 2026
bf7863c
Refactor AdminPage layout to use a grid for stats display and update …
didierkrux Mar 4, 2026
5a69402
Merge branch 'dev' of https://github.com/efdevcon/monorepo into dev
didierkrux Mar 4, 2026
f594ce8
Add admin refund API endpoint and integrate refund functionality in a…
didierkrux Mar 4, 2026
34c9efe
Add subscription API endpoint and integrate newsletter signup in chec…
didierkrux Mar 4, 2026
7e9e313
ticket sharing updates
lassejaco Mar 4, 2026
30f407e
img on mobile
lassejaco Mar 4, 2026
63d5402
Enhance order refund process by adding a detailed cancellation commen…
didierkrux Mar 5, 2026
c1fa2f8
update recipientAddress for prod
didierkrux Mar 5, 2026
f271ca9
Add responsive styling to order confirmation layout for mobile devices
didierkrux Mar 5, 2026
97ad629
Update purchaseHandler to disable email notifications and modify conf…
didierkrux Mar 5, 2026
421fd9e
connect order details with ticket sharing
lassejaco Mar 5, 2026
0065cc8
revert code occlusion
lassejaco Mar 5, 2026
5ceda70
better og
lassejaco Mar 5, 2026
92331b3
x avatar in og
lassejaco Mar 5, 2026
e3de523
cache busting refinements
lassejaco Mar 5, 2026
32f048a
add Coming Soon section
didierkrux Mar 6, 2026
9759cb3
Merge branch 'dev' of https://github.com/efdevcon/monorepo into dev
didierkrux Mar 6, 2026
02e2b4f
Add goalsIdentifier to ticketing config, enhance checkout styles, and…
didierkrux Mar 6, 2026
275a02b
Add discount functionality to checkout, including UI updates for vouc…
didierkrux Mar 6, 2026
6f8667f
Enhance ticket purchase flow by adding dependency checks for question…
didierkrux Mar 6, 2026
cca52d4
Add self-logo image and update ticket store UI with access link badge
didierkrux Mar 6, 2026
70b3618
Implement sold-out ticket handling and UI updates in ticket store
didierkrux Mar 6, 2026
bc507f9
Refactor SelfVerificationModal to remove localStorage usage for vouch…
didierkrux Mar 6, 2026
201151f
Update checkout styles to use a new breakpoint variable for responsiv…
didierkrux Mar 6, 2026
50322b0
Update ticketing configuration to require discount codes and modify d…
didierkrux Mar 6, 2026
d6cd864
Add contact details validation in checkout flow, including error hand…
didierkrux Mar 6, 2026
3d18107
Improve error handling in checkout flow by scrolling to the first inv…
didierkrux Mar 6, 2026
ffac5e4
Enhance voucher redemption error messages to provide specific feedbac…
didierkrux Mar 6, 2026
ac0cbb6
Refactor discount code handling to early access codes, updating relat…
didierkrux Mar 6, 2026
42870e3
Remove nowrap style from ticket store text for improved text wrapping…
didierkrux Mar 6, 2026
5503285
Update dc8-logo.png with new design assets for branding consistency.
didierkrux Mar 6, 2026
300f346
Add dark header support to Header component and related pages
didierkrux Mar 6, 2026
e572c5f
Refactor wallet button layout and styles for improved responsiveness …
didierkrux Mar 6, 2026
0a0269d
Remove ETH confirmation banner from SelfVerificationModal for a clean…
didierkrux Mar 6, 2026
2470e5c
progress
lassejaco Mar 6, 2026
5b12a2a
few fixes and test preview
lassejaco Mar 6, 2026
718c4f7
landing progress again
lassejaco Mar 6, 2026
b2c0f96
ahhh crazy animation rabbit hole
lassejaco Mar 6, 2026
c890fd9
Refactor ticketing system to replace discount code requirements with …
didierkrux Mar 6, 2026
af71b21
ticket banner styling
lassejaco Mar 6, 2026
80153c3
Update ticketing configuration and voucher generation script to use '…
didierkrux Mar 6, 2026
d79be97
Add test mode configuration to ticketing settings and update order cr…
didierkrux Mar 6, 2026
f043cc0
Implement attendee name requirements based on event settings in ticke…
didierkrux Mar 6, 2026
fd74f76
Enhance ticket validation logic to account for dependency conditions
didierkrux Mar 6, 2026
1a490a2
he
lassejaco Mar 7, 2026
b699462
mobile polish
lassejaco Mar 7, 2026
771430d
Update add-to-google-wallet SVG and adjust confirmation module styles
didierkrux Mar 8, 2026
f2984da
narrative block experiment revert + strip not on /tickets routes
lassejaco Mar 9, 2026
5d11f83
drop narrative block experiments, simple solution as mvp
lassejaco Mar 9, 2026
c92b8de
Enhance ticket store functionality with initial ticket data loading a…
didierkrux Mar 9, 2026
711c9b1
ticket sharing logic updated
lassejaco Mar 9, 2026
b01ed1e
Merge branch 'dev' of github.com:efdevcon/monorepo into dev
lassejaco Mar 9, 2026
1d4fb49
storage spam prevention
lassejaco Mar 9, 2026
ec44de4
explicit url, cache busting, and remove translation artifact from url…
lassejaco Mar 9, 2026
26444d2
hooly netlify trap (trailing slash redirects, messes up crawlers for og)
lassejaco Mar 9, 2026
0420bd2
remove instagram as share option
lassejaco Mar 9, 2026
e93da98
tentative share copy
lassejaco Mar 9, 2026
84beb51
fallback to x name if x is setwhen name isnt
lassejaco Mar 9, 2026
904b196
tickets page copy/design feedback fixes
lassejaco Mar 10, 2026
cb57bbb
Add redirect for early bird ticket qr-code URL to ticket store
didierkrux Mar 10, 2026
b40472c
Update ticket image handling to use JPEG format; add new OG image fil…
didierkrux Mar 10, 2026
9a7627c
Enhance ticket generation API to include X display name; update order…
didierkrux Mar 10, 2026
e6cf39e
Implement cache-busting for ticket image URLs and enhance OG image ha…
didierkrux Mar 10, 2026
9e5a810
Update sharing functionality to include dynamic share URL; refine loc…
didierkrux Mar 10, 2026
d1f6095
Refactor ticket sharing component to use dynamic URLs for sharing; en…
didierkrux Mar 10, 2026
afd2bcf
Refactor ticket sharing URLs to improve cache-busting and enhance sha…
didierkrux Mar 10, 2026
0f53aea
Add new API route for dynamic ticket image generation; implement cach…
didierkrux Mar 10, 2026
7f3e593
Implement validation for cached answers in checkout process; ensure a…
didierkrux Mar 10, 2026
5814b07
Enhance checkout page styling and functionality; add Markdown support…
didierkrux Mar 10, 2026
6a4602f
Refactor ticket name handling in API and pages to ensure proper encod…
didierkrux Mar 10, 2026
c638d42
Pre-load background image as data URL in ticket image generation API;…
didierkrux Mar 10, 2026
ad123d6
Update ticket sharing URLs to ensure proper formatting; append traili…
didierkrux Mar 10, 2026
7e31bba
Update ticket image URLs to include specific file extensions for impr…
didierkrux Mar 10, 2026
ed78057
Add Poppins font files and implement pre-loading for improved ticket …
didierkrux Mar 10, 2026
805c7c5
Remove redundant Twitter site meta tags from SEO components and refac…
didierkrux Mar 10, 2026
49071e1
Update order confirmation logic to allow sharing based on either shar…
didierkrux Mar 10, 2026
448b9ea
Refactor ticket sharing URLs in TicketSharing component to use a cons…
didierkrux Mar 10, 2026
a939db3
Add pre-fetching of ticket image URLs in OrderConfirmationPage to enh…
didierkrux Mar 10, 2026
dda6cb2
Enhance ticket generation and sharing functionality by adding version…
didierkrux Mar 10, 2026
404addf
Handle avatar fetching errors in ticket generation API to ensure robu…
didierkrux Mar 11, 2026
770d4f7
Implement voucher email sending functionality and update UI for vouch…
didierkrux Mar 11, 2026
e1eeee6
Refactor early access code generation to prevent duplicates by fetchi…
didierkrux Mar 11, 2026
2d2e4be
Enhance checkout and redeem page UI by updating styles for wallet ide…
didierkrux Mar 11, 2026
dcdf8cf
landing page pivot progress
lassejaco Mar 11, 2026
4bf908e
Update voucher generation script to include new command example for I…
didierkrux Mar 11, 2026
3fd6eac
merge landing page + update faq
lassejaco Mar 11, 2026
7e09171
Add SVG logo and background image for email; enhance SelfVerification…
didierkrux Mar 11, 2026
3adcf64
Merge branch 'dev' of https://github.com/efdevcon/monorepo into dev
didierkrux Mar 11, 2026
e67b40c
Update email template to use new Devcon logo for voucher emails
didierkrux Mar 11, 2026
db6338d
landing page adjustments
lassejaco Mar 11, 2026
7db2da8
Merge branch 'dev' of github.com:efdevcon/monorepo into dev
lassejaco Mar 11, 2026
152b1c4
tickets static page copy
lassejaco Mar 11, 2026
b878c69
learn more button gone
lassejaco Mar 11, 2026
7d6a25e
Update SelfVerificationModal links and enhance price formatting in St…
didierkrux Mar 11, 2026
9990324
Merge branch 'dev' of https://github.com/efdevcon/monorepo into dev
didierkrux Mar 11, 2026
e8589d3
Enhance ticket availability logic and update pricing display in Store…
didierkrux Mar 11, 2026
dbeb4a0
Update Header component to include darkHeader prop for conditional st…
didierkrux Mar 11, 2026
75d6bf4
yt video
lassejaco Mar 11, 2026
f97e207
Merge branch 'dev' of github.com:efdevcon/monorepo into dev
lassejaco Mar 11, 2026
9efef1f
Integrate voucher availability checks into ticket availability and pu…
didierkrux Mar 11, 2026
6552a17
mobile foldout navigation visuals improved
lassejaco Mar 11, 2026
ef447b6
limit hero height on mobile (ios glass problem) + fix type error
lassejaco Mar 11, 2026
1cb9f6e
Refactor SelfVerificationModal to improve error handling during vouch…
didierkrux Mar 11, 2026
b9c44c3
Merge branch 'dev' of https://github.com/efdevcon/monorepo into dev
didierkrux Mar 11, 2026
1080285
Update ticketing configuration to replace test collection with india-…
didierkrux Mar 11, 2026
6870ac0
Merge branch 'main' into dev
didierkrux Mar 11, 2026
96352d4
Update pnpm-lock.yaml to reflect version changes for various dependen…
didierkrux Mar 11, 2026
20d6609
Update GitHub Actions workflow to use updated versions of checkout, s…
didierkrux Mar 11, 2026
c5e860a
Reorder Node.js setup step in GitHub Actions workflow for clarity and…
didierkrux Mar 11, 2026
77ea2a4
Update Node.js version in GitHub Actions workflow from 18.x to 20.x f…
didierkrux Mar 11, 2026
c9c9e5f
Update GitHub Actions workflow to change lint command from 'pnpm lint…
didierkrux Mar 11, 2026
0f86fdf
Update GitHub Actions workflow to change lint command from 'pnpm run …
didierkrux Mar 11, 2026
758b889
Update GitHub Actions workflow to modify lint command from 'pnpm exec…
didierkrux Mar 11, 2026
f5ecd41
Refactor lint command in GitHub Actions workflow to use '--quiet' for…
didierkrux Mar 11, 2026
76b4c71
Add TransferWithAuthorizationArgs type for improved type safety in re…
didierkrux Mar 11, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
65 changes: 65 additions & 0 deletions .claude/launch.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
{
"version": "0.0.1",
"configurations": [
{
"name": "devcon",
"runtimeExecutable": "pnpm",
"runtimeArgs": ["--filter", "devcon-website", "dev"],
"port": 3000
},
{
"name": "devcon-app",
"runtimeExecutable": "pnpm",
"runtimeArgs": ["--filter", "devcon-app", "dev"],
"port": 3000
},
{
"name": "devcon-api",
"runtimeExecutable": "pnpm",
"runtimeArgs": ["--filter", "devcon-api", "dev"],
"port": 4000
},
{
"name": "devcon-ai",
"runtimeExecutable": "pnpm",
"runtimeArgs": ["--filter", "devcon-ai", "dev"],
"port": 3001
},
{
"name": "devconnect",
"runtimeExecutable": "pnpm",
"runtimeArgs": ["--filter", "devconnect", "dev"],
"port": 3000
},
{
"name": "devconnect-app",
"runtimeExecutable": "pnpm",
"runtimeArgs": ["--filter", "devconnect-app", "dev"],
"port": 3000
},
{
"name": "archive",
"runtimeExecutable": "pnpm",
"runtimeArgs": ["--filter", "archive", "dev"],
"port": 3000
},
{
"name": "perks-portal",
"runtimeExecutable": "pnpm",
"runtimeArgs": ["--filter", "perks-portal", "dev"],
"port": 3000
},
{
"name": "event-app",
"runtimeExecutable": "pnpm",
"runtimeArgs": ["--filter", "event-app", "dev"],
"port": 3000
},
{
"name": "social-ticket",
"runtimeExecutable": "pnpm",
"runtimeArgs": ["--filter", "social-ticket", "dev"],
"port": 3000
}
]
}
35 changes: 0 additions & 35 deletions .cursor/rules/devconnect-app.mdc

This file was deleted.

39 changes: 0 additions & 39 deletions .cursor/rules/shared.mdc

This file was deleted.

17 changes: 12 additions & 5 deletions .github/workflows/devcon.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,15 +19,22 @@ jobs:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v4

- name: Setup pnpm
uses: pnpm/action-setup@v4
with:
version: 10.13.1
run_install: false

- name: Use Node.js
uses: actions/setup-node@v1
uses: actions/setup-node@v4
with:
node-version: "18.x"
node-version: "20.x"
cache: "pnpm"

- name: Install dependencies
run: yarn
run: pnpm install --frozen-lockfile

- name: Run Eslint // Lint
run: yarn lint
run: pnpm exec eslint . --quiet
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -65,3 +65,6 @@ devcon/analyze/**
# Local Netlify folder
.netlify

# Claude
.claude/settings.local.json

3 changes: 3 additions & 0 deletions devcon-api/data/whitelisted-domains.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
domain
ethereum.org
university.edu
91 changes: 91 additions & 0 deletions devcon-api/src/controllers/whitelist.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
import { Request, Response, Router } from 'express'
import fs from 'fs'
import { join } from 'path'
import { SignJWT, jwtVerify } from 'jose'
import { parseCSV } from '@/utils/files'
import { sendMail } from '@/services/email'
import { CONFIG, SERVER_CONFIG } from '@/utils/config'

export const whitelistRouter = Router()

whitelistRouter.post('/whitelist/send-form-link', sendFormLink)
whitelistRouter.get('/whitelist/verify', verifyToken)

async function sendFormLink(req: Request, res: Response) {
const { email } = req.body

if (!email || typeof email !== 'string') {
return res.status(400).send({ status: 400, message: 'Email is required' })
}

const domain = email.split('@')[1]?.toLowerCase()
if (!domain) {
return res.status(400).send({ status: 400, message: 'Invalid email format' })
}

try {
const csvPath = join(CONFIG.DATA_FOLDER, 'whitelisted-domains.csv')
const csvData = fs.readFileSync(csvPath, 'utf-8')
const rows = await parseCSV(csvData)
const whitelistedDomains = rows.map((row: any) => row.domain?.toLowerCase().trim())

const isWhitelisted = whitelistedDomains.includes(domain)

if (!isWhitelisted) {
// Not whitelisted — return the form URL directly (no token), they can still apply
const formUrl = SERVER_CONFIG.WHITELIST_FORM_URL
return res.status(200).send({ status: 200, message: 'Form link ready', data: { formUrl, whitelisted: false } })
}

// Whitelisted — sign a JWT and email the form link with the token pre-filled
const secret = new TextEncoder().encode(SERVER_CONFIG.WHITELIST_JWT_SECRET)
const token = await new SignJWT({ email, domain })
.setProtectedHeader({ alg: 'HS256' })
.setExpirationTime('7d')
.setIssuedAt()
.sign(secret)

const formUrl = `${SERVER_CONFIG.WHITELIST_FORM_URL}?usp=pp_url&${SERVER_CONFIG.WHITELIST_FORM_TOKEN_FIELD}=${token}`

if (SERVER_CONFIG.NODE_ENV === 'development') {
// Dev mode — skip email, return the form URL directly
return res.status(200).send({ status: 200, message: 'Form link ready (dev mode)', data: { formUrl, whitelisted: true } })
}

await sendMail(email, 'email-cta', 'Your Devcon Form Link', {
TITLE: 'Your Devcon Form Link',
DESCRIPTION: 'Click the button below to access the form.',
CALL_TO_ACTION: 'Open Form',
URL: formUrl,
})

return res.status(200).send({ status: 200, message: 'Form link sent', data: { whitelisted: true } })
} catch (error) {
console.error('Error in send-form-link:', error)
return res.status(500).send({ status: 500, message: 'Internal server error' })
}
}

async function verifyToken(req: Request, res: Response) {
const { token } = req.query

if (!token || typeof token !== 'string') {
return res.status(400).send({ status: 400, data: { whitelisted: false }, message: 'Token is required' })
}

try {
const secret = new TextEncoder().encode(SERVER_CONFIG.WHITELIST_JWT_SECRET)
const { payload } = await jwtVerify(token, secret)

return res.status(200).send({
status: 200,
data: {
whitelisted: true,
email: payload.email,
domain: payload.domain,
},
})
} catch (error) {
return res.status(401).send({ status: 401, data: { whitelisted: false }, message: 'Invalid or expired token' })
}
}
2 changes: 2 additions & 0 deletions devcon-api/src/routes.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import { aiRouter } from '@/controllers/ai'
import { atSlurperRouter } from '@/controllers/at-slurper'
import { destinoRouter } from '@/controllers/destino'
import { hooksRouter } from '@/controllers/hooks'
import { whitelistRouter } from '@/controllers/whitelist'
import { Router } from 'express'
import { API_INFO } from '@/utils/config'

Expand All @@ -27,3 +28,4 @@ router.use(aiRouter)
router.use(atSlurperRouter)
router.use(destinoRouter)
router.use(hooksRouter)
router.use(whitelistRouter)
4 changes: 4 additions & 0 deletions devcon-api/src/utils/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,10 @@ export const SERVER_CONFIG = {
SMTP_PASSWORD: process.env.SMTP_PASSWORD,

ACCREDITATION_GUIDE_URL: process.env.ACCREDITATION_GUIDE_URL || '',

WHITELIST_JWT_SECRET: process.env.WHITELIST_JWT_SECRET || '',
WHITELIST_FORM_URL: process.env.WHITELIST_FORM_URL || '',
WHITELIST_FORM_TOKEN_FIELD: process.env.WHITELIST_FORM_TOKEN_FIELD || 'entry.123456789',
}

export const PRETALX_CONFIG = {
Expand Down
Loading
Loading