1998 Commits

Author SHA1 Message Date
Fatih Kadir Akın f9bfb652f5 loop engineering 2026-07-17 12:30:58 +03:00
Fatih Kadir Akın 0ff39beb92 Add translated Loop Engineering chapter 2026-07-16 13:32:32 +03:00
Fatih Kadir Akın 494d1d21d9 latentshift sponsorship 2026-07-13 10:50:08 +03:00
kennynah85@gmail.com 5bb7c121ce Add prompt: reviewgod 2026-07-13 04:17:15 +00:00
Luoxuan-Dinziku 86b1eab908 Add prompt: learning from zero 2026-07-13 04:17:15 +00:00
sxlderek@gmail.com 8a5b01d9dd Add prompt: Prompt Enhancer (concise) 2026-07-13 04:17:14 +00:00
piyashossen11@gmail.com 6dae4c70d2 Update prompt: Code Review Specialist 2026-07-13 04:17:14 +00:00
faizanshakilf@gmail.com 661ea0afc5 Update prompt: Ben 2026-07-13 04:17:13 +00:00
xiaoyucunx 6fbdffd82d Update prompt: Code Review Specialist 2026-07-13 04:17:13 +00:00
cperalesg@gmail.com b1a42e16e5 Update prompt: Prompt Generator 2026-07-13 04:17:12 +00:00
panda667 d6efa6824d Update prompt: Astrologer 2026-07-13 04:17:12 +00:00
joembolinas 509a919f6f Update prompt: The Technical Co-Founder: Building Real Products Together 2026-07-13 04:17:11 +00:00
aymanrabeemac@gmail.com 464dce41a3 Update prompt: Code Review Specialist 2026-07-13 04:17:11 +00:00
aitank2020@gmail.com 2146e5fbd2 Update prompt: Echoes of the Rust Age 2026-07-13 04:17:10 +00:00
dragoy18@gmail.com 6b7aed9145 Update prompt: Code Review Specialist 2 2026-07-13 04:17:10 +00:00
lior1976@gmail.com abf011dc38 Update prompt: Article Summarizer 2026-07-13 04:17:09 +00:00
beresasis@gmail.com 0f43e196a1 Update prompt: Interview Preparation Coach 2026-07-13 04:17:09 +00:00
sinansonmez a89ce0b668 Update prompt: Code Review Assistant 2026-07-13 04:17:08 +00:00
giorgiop 4851ede5b5 Update prompt: Virtual Doctor 2026-07-13 04:17:08 +00:00
sxlderek@gmail.com 9909d195df Remove prompt: AI Prompt Enhancer 2026-07-13 04:17:07 +00:00
raisesnfc@gmail.com bae0c6d574 Add prompt: Produccion Musical IA Electronic | Agente Celestial Designs 2026-07-12 04:15:05 +00:00
raisesnfc@gmail.com c425888078 Add prompt: Video Cinematográfico IA | Agente Celestial Designs 2026-07-12 04:15:04 +00:00
raisesnfc@gmail.com 1887e54701 Add prompt: Realismo Cinematográfico 8K | Agente Celestial Designs 2026-07-12 04:15:04 +00:00
raisesnfc@gmail.com c8dc257a58 Add prompt: Copy Publicitario Persuasivo | Agente Celestial Designs 2026-07-12 04:15:03 +00:00
raisesnfc@gmail.com fcec1ac008 Add prompt: Diseño HUD Sci-Fi | Agente Celestial Designs 2026-07-12 04:15:03 +00:00
medina.surdo94@gmail.com 013f505230 Add prompt: Mejorar calidad de imagen 2026-07-12 04:15:02 +00:00
TomsTools11 43a229ac41 Add prompt: KP Prompting 2026-07-12 04:15:02 +00:00
TomsTools11 afe4fc481b Add prompt: Writing Style Replication 2026-07-12 04:15:02 +00:00
TomsTools11 7fecdc9c41 Add prompt: B2B Market Research 2026-07-12 04:15:01 +00:00
senoldak 478887b203 Add prompt: 🎵 ChildSong Guardian 2026-07-12 04:15:01 +00:00
akuechechinedu@gmail.com 4be9b1dec8 Update prompt: Ben 2026-07-12 04:15:00 +00:00
624406266@qq.com ed7a578842 Update prompt: Code Review Specialist 2026-07-12 04:15:00 +00:00
xiaoyucunx 08985b55cb Update prompt: Code Review Specialist 2026-07-12 04:14:59 +00:00
fede.gazzelloni@gmail.com 857eb561c8 Update prompt: Article Summarizer 2026-07-12 04:14:59 +00:00
debashis.sarker@gmail.com f78f1e7498 Update prompt: The Technical Co-Founder: Building Real Products Together 2026-07-12 04:14:58 +00:00
amvicioushecs 6b4b3dd851 Update prompt: Human-Like Creative Writing Challenge
Co-authored-by: shubhankar.agarwal10@gmail.com <shubhankar.agarwal10@gmail.com>
2026-07-12 04:14:58 +00:00
aymanrabeemac@gmail.com 8024a660d0 Update prompt: Code Review Specialist 2026-07-12 04:14:57 +00:00
TomsTools11 1de61bff20 Update prompt: Advanced Account Research
Co-authored-by: zhu.liu0204@gmail.com <zhu.liu0204@gmail.com>
2026-07-12 04:14:57 +00:00
nolanneff 522a909e17 Update prompt: Code Review Specialist 2 2026-07-12 04:14:56 +00:00
ersinkoc d68d01ec59 Update prompt: Echoes of the Rust Age 2026-07-12 04:14:56 +00:00
cnwdy888@gmail.com 9ebbacdcce Update prompt: Interview Preparation Coach 2026-07-12 04:14:55 +00:00
guangzhongzhang978@gmail.com 8b3a97c392 Update prompt: Virtual Doctor 2026-07-12 04:14:55 +00:00
f fe90b0f7a4 Update prompt: Code Review Assistant 2026-07-12 04:14:54 +00:00
devisasari e0d25dbff4 Update prompt: Astrologer 2026-07-12 04:14:54 +00:00
iuzn cfe711eb5a Update prompt: Prompt Generator 2026-07-12 04:14:54 +00:00
adediwuratemitope745@gmail.com 4196d591ee Add prompt: Past question 2026-07-11 04:05:06 +00:00
sxlderek@gmail.com b06d34b98b Add prompt: AI Prompt Enhancer 2026-07-11 04:05:05 +00:00
omidzamani2@gmail.com ccd7146c6c Add prompt: Codebase Ecosystem Atlas 2026-07-11 04:05:05 +00:00
sxlderek@gmail.com bc559aa646 Update prompt: AI Provider Research Expert 2026-07-11 04:05:05 +00:00
piyashossen11@gmail.com 9a32d1f91b Update prompt: Code Review Specialist 2026-07-11 04:05:04 +00:00
faizanshakilf@gmail.com a6c9350999 Update prompt: Ben 2026-07-11 04:05:04 +00:00
xiaoyucunx c677e97ebe Update prompt: Code Review Specialist 2026-07-11 04:05:03 +00:00
cperalesg@gmail.com e7baccb6e1 Update prompt: Prompt Generator 2026-07-11 04:05:03 +00:00
panda667 571784a8d1 Update prompt: Astrologer 2026-07-11 04:05:03 +00:00
joembolinas 3609f2ddd8 Update prompt: The Technical Co-Founder: Building Real Products Together 2026-07-11 04:05:02 +00:00
aymanrabeemac@gmail.com ec585d0d8f Update prompt: Code Review Specialist 2026-07-11 04:05:02 +00:00
aitank2020@gmail.com a0e10aa4b4 Update prompt: Echoes of the Rust Age 2026-07-11 04:05:01 +00:00
dragoy18@gmail.com 012399357a Update prompt: Code Review Specialist 2 2026-07-11 04:05:01 +00:00
lior1976@gmail.com c9a8da6af6 Update prompt: Article Summarizer 2026-07-11 04:05:01 +00:00
beresasis@gmail.com 421b6ccd11 Update prompt: Interview Preparation Coach 2026-07-11 04:05:00 +00:00
sinansonmez d3d9637ae3 Update prompt: Code Review Assistant 2026-07-11 04:05:00 +00:00
giorgiop b3fbb175d7 Update prompt: Virtual Doctor 2026-07-11 04:04:59 +00:00
shanjunmei 01a18249ff Add prompt: Go Industrial Autonomous Business Module Coding Spec (shanjunmei/dig Compile-Time DI) 2026-07-10 04:24:57 +00:00
sxlderek@gmail.com 9d23f65975 Add prompt: AI Provider Research Expert 2026-07-10 04:24:56 +00:00
sxlderek@gmail.com b4bf870164 Add prompt: CLI silently install software on windows 2026-07-10 04:24:56 +00:00
akuechechinedu@gmail.com 23bc4ee588 Update prompt: Ben 2026-07-10 04:24:56 +00:00
shanjunmei a0874ddd5b Update prompt: Specialized Assistant for shanjunmei/dig Compile-Time DI Library 2026-07-10 04:24:55 +00:00
sxlderek@gmail.com e378b4c2c5 Update prompt: ai model card 2026-07-10 04:24:55 +00:00
kennynah85@gmail.com be7432e54e Update prompt: formattg 2026-07-10 04:24:54 +00:00
kennynah85@gmail.com 242f9afd77 Update prompt: formatgdoc 2026-07-10 04:24:54 +00:00
elpicoso 915d58eb61 Update prompt: Photography Trip Planning — Research-Backed Itinerary Builder 2026-07-10 04:24:53 +00:00
624406266@qq.com 6f85566126 Update prompt: Code Review Specialist 2026-07-10 04:24:53 +00:00
xiaoyucunx 2ff5fa2ae8 Update prompt: Code Review Specialist 2026-07-10 04:24:52 +00:00
fede.gazzelloni@gmail.com 1915c1152f Update prompt: Article Summarizer 2026-07-10 04:24:52 +00:00
debashis.sarker@gmail.com d82340250c Update prompt: The Technical Co-Founder: Building Real Products Together 2026-07-10 04:24:51 +00:00
aymanrabeemac@gmail.com 6ead744a56 Update prompt: Code Review Specialist 2026-07-10 04:24:51 +00:00
nolanneff 232b4c86ab Update prompt: Code Review Specialist 2 2026-07-10 04:24:50 +00:00
ersinkoc 016bbefa31 Update prompt: Echoes of the Rust Age 2026-07-10 04:24:50 +00:00
cnwdy888@gmail.com 0960102926 Update prompt: Interview Preparation Coach 2026-07-10 04:24:49 +00:00
guangzhongzhang978@gmail.com 65117ef6f7 Update prompt: Virtual Doctor 2026-07-10 04:24:49 +00:00
f aea52ef116 Update prompt: Code Review Assistant 2026-07-10 04:24:48 +00:00
devisasari d63856f345 Update prompt: Astrologer 2026-07-10 04:24:48 +00:00
iuzn 3a3fdd12f8 Update prompt: Prompt Generator 2026-07-10 04:24:47 +00:00
sxlderek@gmail.com 7c8830c95c Remove prompt: cli silently install software on windows 2026-07-10 04:24:47 +00:00
shanjunmei aceafa8adc Add prompt: Specialized Assistant for shanjunmei/dig Compile-Time DI Library 2026-07-09 04:28:18 +00:00
kevin.hou4939@gmail.com 783f89aec2 Add prompt: explain a Concept via Allegorical Story 2026-07-09 04:28:17 +00:00
sxlderek@gmail.com e01c0e589c Add prompt: cli silently install software on windows 2026-07-09 04:28:17 +00:00
sxlderek@gmail.com 1bfe536657 Add prompt: ai model card 2026-07-09 04:28:17 +00:00
sxlderek@gmail.com a38e5b1382 Add prompt: Omniroute bulk input key converter (cf) 2026-07-09 04:28:16 +00:00
omidzamani2@gmail.com 5ea54fe128 Add prompt: Comprehensive Research Prompt Generator 2026-07-09 04:28:16 +00:00
omidzamani2@gmail.com 7daa023b02 Add prompt: Unified Research and Source Analysis Prompt 2026-07-09 04:28:16 +00:00
omidzamani2@gmail.com 9d3e796c56 Add prompt: Ultra Brief One-Sentence Answers 2026-07-09 04:28:15 +00:00
omidzamani2@gmail.com 8dfa753eac Add prompt: Golden Prompt for Short, Useful Answers 2026-07-09 04:28:15 +00:00
omidzamani2@gmail.com f1924c7422 Add prompt: Face Identity Preservation Negative Prompt 2026-07-09 04:28:15 +00:00
omidzamani2@gmail.com b6cce509a7 Add prompt: Identity-Locked Image Transformation Prompt 2026-07-09 04:28:14 +00:00
piyashossen11@gmail.com 05f7b3828c Update prompt: Code Review Specialist 2026-07-09 04:28:14 +00:00
xiaoyucunx 57138e74a6 Update prompt: Code Review Specialist 2026-07-09 04:28:13 +00:00
cperalesg@gmail.com 83753e93d0 Update prompt: Prompt Generator 2026-07-09 04:28:13 +00:00
panda667 a3f8c8250b Update prompt: Astrologer 2026-07-09 04:28:13 +00:00
joembolinas 3428f3b5ea Update prompt: The Technical Co-Founder: Building Real Products Together 2026-07-09 04:28:12 +00:00
aymanrabeemac@gmail.com 3435a50c9c Update prompt: Code Review Specialist 2026-07-09 04:28:12 +00:00
aitank2020@gmail.com 2d59e6326d Update prompt: Echoes of the Rust Age 2026-07-09 04:28:12 +00:00
dragoy18@gmail.com 4979db28e8 Update prompt: Code Review Specialist 2 2026-07-09 04:28:11 +00:00
lior1976@gmail.com 0f6e5b6ee4 Update prompt: Article Summarizer 2026-07-09 04:28:11 +00:00
beresasis@gmail.com 66c9d9781a Update prompt: Interview Preparation Coach 2026-07-09 04:28:10 +00:00
sinansonmez 321c1521c1 Update prompt: Code Review Assistant 2026-07-09 04:28:10 +00:00
giorgiop da72a44371 Update prompt: Virtual Doctor 2026-07-09 04:28:10 +00:00
adamsofea1111 7747c6bb4f Remove prompt: Create a Stunning Image 2026-07-09 04:28:09 +00:00
mdshoharabhosen@gmail.com 2f17ce7a22 Remove prompt: picture 2026-07-09 04:28:09 +00:00
kennynah85@gmail.com 12385d74a6 Add prompt: TGscrape 2026-07-08 04:06:05 +00:00
samuele.francia01@gmail.com a407fa3b29 Add prompt: Video Istruttivo sui Muscoli per Studenti 2026-07-08 04:06:05 +00:00
hocestnonsatis 8ba304d34e Add prompt: memories.md Usage Instructions (System Prompt) 2026-07-08 04:06:04 +00:00
sxlderek@gmail.com f3c9b7b9cd Add prompt: hermes agent desktop default system prompt 2026-07-08 04:06:04 +00:00
kennynah85@gmail.com f4d6021752 Add prompt: formattg 2026-07-08 04:06:03 +00:00
kennynah85@gmail.com c5d47b897f Add prompt: formatgdoc 2026-07-08 04:06:03 +00:00
624406266@qq.com d099743d5d Update prompt: Code Review Specialist 2026-07-08 04:06:03 +00:00
xiaoyucunx e61cacd540 Update prompt: Code Review Specialist 2026-07-08 04:06:02 +00:00
fede.gazzelloni@gmail.com 54d1b00b36 Update prompt: Article Summarizer 2026-07-08 04:06:02 +00:00
debashis.sarker@gmail.com 867e05c7e2 Update prompt: The Technical Co-Founder: Building Real Products Together 2026-07-08 04:06:01 +00:00
aymanrabeemac@gmail.com 987ae54b1d Update prompt: Code Review Specialist 2026-07-08 04:06:01 +00:00
nolanneff 0576ee2ac1 Update prompt: Code Review Specialist 2 2026-07-08 04:06:00 +00:00
ersinkoc b02374451a Update prompt: Echoes of the Rust Age 2026-07-08 04:06:00 +00:00
cnwdy888@gmail.com 82e1abad8a Update prompt: Interview Preparation Coach 2026-07-08 04:05:59 +00:00
guangzhongzhang978@gmail.com 1e6bdf60ee Update prompt: Virtual Doctor 2026-07-08 04:05:59 +00:00
f f553befdff Update prompt: Code Review Assistant 2026-07-08 04:05:58 +00:00
devisasari 446e18fc9f Update prompt: Astrologer 2026-07-08 04:05:58 +00:00
iuzn a6cba3c670 Update prompt: Prompt Generator 2026-07-08 04:05:57 +00:00
med31glasgow@gmail.com e0e2ed3140 Add prompt: Comprehensive School Management Platform Development 2026-07-07 04:24:48 +00:00
senoldak 6fd42c69bf Add prompt: 🤖 SafeKids Video Analyzer 2026-07-07 04:24:48 +00:00
kennynah85@gmail.com d3bd3d8548 Add prompt: watchlist 2026-07-07 04:24:47 +00:00
piyashossen11@gmail.com 5e3885c682 Update prompt: Code Review Specialist 2026-07-07 04:24:47 +00:00
xiaoyucunx 99d47ddb91 Update prompt: Code Review Specialist 2026-07-07 04:24:47 +00:00
cperalesg@gmail.com 29b3516cfe Update prompt: Prompt Generator 2026-07-07 04:24:46 +00:00
panda667 a33832115a Update prompt: Astrologer 2026-07-07 04:24:46 +00:00
joembolinas 8dff89c29c Update prompt: The Technical Co-Founder: Building Real Products Together 2026-07-07 04:24:45 +00:00
aymanrabeemac@gmail.com b3e6a8a831 Update prompt: Code Review Specialist 2026-07-07 04:24:45 +00:00
aitank2020@gmail.com f188e83712 Update prompt: Echoes of the Rust Age 2026-07-07 04:24:44 +00:00
dragoy18@gmail.com 4c762f33e4 Update prompt: Code Review Specialist 2 2026-07-07 04:24:44 +00:00
lior1976@gmail.com c9159706f1 Update prompt: Article Summarizer 2026-07-07 04:24:43 +00:00
beresasis@gmail.com 85f4a12569 Update prompt: Interview Preparation Coach 2026-07-07 04:24:43 +00:00
sinansonmez cd5cd5af9f Update prompt: Code Review Assistant 2026-07-07 04:24:42 +00:00
giorgiop ae5aa3049a Update prompt: Virtual Doctor 2026-07-07 04:24:42 +00:00
IcyMost 1279824bb1 Remove prompt: Heartfelt Message for a Friend 2026-07-07 04:24:41 +00:00
mdalimmdalim110@gmail.com 6b1dd6de21 Add prompt: Fox gets trapped while trying to steal chicken 2026-07-06 04:32:20 +00:00
yzaheer3@gmail.com 41e9febc67 Add prompt: Pay Appraisal 2026-07-06 04:32:19 +00:00
hmmobarez7@gmail.com 564418d039 Add prompt: PLAN 2026-07-06 04:32:19 +00:00
dominic@stefani.email 6a7f19059c Add prompt: Vintage copper engraving portrait with glasses in front of yellow circle 2026-07-06 04:32:18 +00:00
kennynah85@gmail.com bf3d146c08 Add prompt: gamereview 2026-07-06 04:32:18 +00:00
624406266@qq.com e01b54b581 Update prompt: Code Review Specialist 2026-07-06 04:32:17 +00:00
xiaoyucunx 5cbbb82012 Update prompt: Code Review Specialist 2026-07-06 04:32:17 +00:00
fede.gazzelloni@gmail.com 2c322dcdd2 Update prompt: Article Summarizer 2026-07-06 04:32:16 +00:00
debashis.sarker@gmail.com 3b85b0fd8d Update prompt: The Technical Co-Founder: Building Real Products Together 2026-07-06 04:32:16 +00:00
aymanrabeemac@gmail.com f1011f0e7f Update prompt: Code Review Specialist 2026-07-06 04:32:15 +00:00
nolanneff 73834040e5 Update prompt: Code Review Specialist 2 2026-07-06 04:32:15 +00:00
ersinkoc 17b61e225d Update prompt: Echoes of the Rust Age 2026-07-06 04:32:14 +00:00
cnwdy888@gmail.com 04f61d9465 Update prompt: Interview Preparation Coach 2026-07-06 04:32:14 +00:00
guangzhongzhang978@gmail.com a8d8a3b44f Update prompt: Virtual Doctor 2026-07-06 04:32:13 +00:00
f 9ec9d90353 Update prompt: Code Review Assistant 2026-07-06 04:32:13 +00:00
devisasari 0411ef1edd Update prompt: Astrologer 2026-07-06 04:32:12 +00:00
iuzn ad628589a3 Update prompt: Prompt Generator 2026-07-06 04:32:12 +00:00
kennynah85@gmail.com 2af0a0bfd7 Add prompt: simmerdeep 2026-07-05 04:27:47 +00:00
kennynah85@gmail.com f841912bb3 Add prompt: alfakennybody 2026-07-05 04:27:46 +00:00
kennynah85@gmail.com 3d0f7d37fd Add prompt: Quant 2026-07-05 04:27:46 +00:00
kennynah85@gmail.com 91d9f1b997 Add prompt: bond 2026-07-05 04:27:45 +00:00
kennynah85@gmail.com e77f5a3f9e Add prompt: script 2026-07-05 04:27:45 +00:00
kennynah85@gmail.com c7f7a8a93d Add prompt: speech100 2026-07-05 04:27:44 +00:00
kennynah85@gmail.com 6bb97bef20 Add prompt: Probe 2026-07-05 04:27:44 +00:00
kennynah85@gmail.com 1b5da4d2d5 Add prompt: timeline 2026-07-05 04:27:43 +00:00
kennynah85@gmail.com 880b546369 Add prompt: tabs 2026-07-05 04:27:43 +00:00
kennynah85@gmail.com 714bb3084c Add prompt: cunninglinguist 2026-07-05 04:27:43 +00:00
kennynah85@gmail.com 160a4a7fe1 Add prompt: dialectic 2026-07-05 04:27:42 +00:00
kennynah85@gmail.com bc630bb774 Add prompt: Echo innovation 2026-07-05 04:27:42 +00:00
kennynah85@gmail.com 480d4d0a4e Add prompt: devil adv 2026-07-05 04:27:41 +00:00
kennynah85@gmail.com bbb41c8045 Add prompt: shop 2026-07-05 04:27:41 +00:00
kennynah85@gmail.com 139f5f9a50 Add prompt: flaneur 2026-07-05 04:27:40 +00:00
kennynah85@gmail.com ccedef1e0c Add prompt: reviews 2026-07-05 04:27:40 +00:00
kennynah85@gmail.com a01169f95b Add prompt: subvert 2026-07-05 04:27:39 +00:00
kennynah85@gmail.com 48a22a64c4 Add prompt: 1337 2026-07-05 04:27:39 +00:00
kennynah85@gmail.com d4a737605a Add prompt: cantankerous 2026-07-05 04:27:39 +00:00
kennynah85@gmail.com 507e5ee5b3 Add prompt: DD 2026-07-05 04:27:38 +00:00
kennynah85@gmail.com b666a88a7f Add prompt: Factcheck 2026-07-05 04:27:38 +00:00
kennynah85@gmail.com 43ac9e4694 Add prompt: Deduce 2026-07-05 04:27:37 +00:00
kennynah85@gmail.com e9219fb528 Add prompt: distill 2026-07-05 04:27:37 +00:00
kennynah85@gmail.com 80b23757ca Add prompt: diff 2026-07-05 04:27:36 +00:00
kennynah85@gmail.com 2e11b4e3b1 Add prompt: alfa2 2026-07-05 04:27:36 +00:00
kennynah85@gmail.com 67ff54dafd Add prompt: alfa 2026-07-05 04:27:36 +00:00
kennynah85@gmail.com 056a0d1f66 Add prompt: human 2026-07-05 04:27:35 +00:00
kennynah85@gmail.com 7b543d77e3 Add prompt: bizcase 2026-07-05 04:27:35 +00:00
kennynah85@gmail.com 88b091b971 Add prompt: lit crit 2026-07-05 04:27:34 +00:00
kennynah85@gmail.com 6399409e3c Add prompt: steamdiscount 2026-07-05 04:27:34 +00:00
kennynah85@gmail.com 3c198ac223 Add prompt: deconstruct 2026-07-05 04:27:33 +00:00
kennynah85@gmail.com 20f73a5ef1 Add prompt: Refute 2026-07-05 04:27:33 +00:00
piyashossen11@gmail.com 87b384421e Update prompt: Code Review Specialist 2026-07-05 04:27:32 +00:00
xiaoyucunx 2699394e55 Update prompt: Code Review Specialist 2026-07-05 04:27:32 +00:00
cperalesg@gmail.com 90d94d88f9 Update prompt: Prompt Generator 2026-07-05 04:27:31 +00:00
panda667 ca326fe899 Update prompt: Astrologer 2026-07-05 04:27:31 +00:00
joembolinas 96d3ef4b17 Update prompt: The Technical Co-Founder: Building Real Products Together 2026-07-05 04:27:31 +00:00
aymanrabeemac@gmail.com a655435d8a Update prompt: Code Review Specialist 2026-07-05 04:27:30 +00:00
aitank2020@gmail.com 28e42dda34 Update prompt: Echoes of the Rust Age 2026-07-05 04:27:30 +00:00
dragoy18@gmail.com f03a8a66b2 Update prompt: Code Review Specialist 2 2026-07-05 04:27:29 +00:00
lior1976@gmail.com 88d6cff4e7 Update prompt: Article Summarizer 2026-07-05 04:27:29 +00:00
beresasis@gmail.com 020c4126e8 Update prompt: Interview Preparation Coach 2026-07-05 04:27:28 +00:00
sinansonmez 4584c4b7d5 Update prompt: Code Review Assistant 2026-07-05 04:27:28 +00:00
giorgiop b726be4d39 Update prompt: Virtual Doctor 2026-07-05 04:27:27 +00:00
amvicioushecs 506d195be3 Add prompt: Structural Fusion: The Thriller-Parable 2026-07-04 04:18:25 +00:00
adamsofea1111 91990c81d7 Add prompt: Image Analysis for Personal Style and Personality Assessment 2026-07-04 04:18:25 +00:00
armanalis a4b6d7ee01 Add prompt: Subject-Wise School Performance Dashboard Generator 2026-07-04 04:18:24 +00:00
624406266@qq.com 36b28324bc Update prompt: Code Review Specialist 2026-07-04 04:18:24 +00:00
xiaoyucunx a8ea8cb23d Update prompt: Code Review Specialist 2026-07-04 04:18:23 +00:00
fede.gazzelloni@gmail.com b5a2d400f7 Update prompt: Article Summarizer 2026-07-04 04:18:23 +00:00
debashis.sarker@gmail.com ed95607a39 Update prompt: The Technical Co-Founder: Building Real Products Together 2026-07-04 04:18:22 +00:00
aymanrabeemac@gmail.com dc2c13d77b Update prompt: Code Review Specialist 2026-07-04 04:18:22 +00:00
nolanneff f4fe64d11c Update prompt: Code Review Specialist 2 2026-07-04 04:18:21 +00:00
ersinkoc 31056cc279 Update prompt: Echoes of the Rust Age 2026-07-04 04:18:21 +00:00
cnwdy888@gmail.com c6a93f565c Update prompt: Interview Preparation Coach 2026-07-04 04:18:20 +00:00
guangzhongzhang978@gmail.com b7171511bd Update prompt: Virtual Doctor 2026-07-04 04:18:20 +00:00
f 27ea6a2dfc Update prompt: Code Review Assistant 2026-07-04 04:18:19 +00:00
devisasari f3ab9562bc Update prompt: Astrologer 2026-07-04 04:18:19 +00:00
iuzn 0486fd50a0 Update prompt: Prompt Generator 2026-07-04 04:18:18 +00:00
alsterzhang@gmail.com 4d1dff58a7 Add prompt: AI Web search Customer 2026-07-03 04:21:22 +00:00
ddosa300-arch 7c9ac38c7d Add prompt: توليد فيديو عبر الذكاء الاصطناعي 2026-07-03 04:21:21 +00:00
aadisingh22@gmail.com d511c18482 Add prompt: Result 2026-07-03 04:21:21 +00:00
feroz2258@gmail.com e4244279b8 Add prompt: Performing a Popular Song at a Concert 2026-07-03 04:21:20 +00:00
bcokdilli c49aae2caf Add prompt: Enhancing Efficiency with Codex Using Sub-Agents 2026-07-03 04:21:20 +00:00
EmX0X d0c61086b5 Add prompt: High-precision research and performance architecture engine 2026-07-03 04:21:19 +00:00
piyashossen11@gmail.com b266c23d78 Update prompt: Code Review Specialist 2026-07-03 04:21:19 +00:00
xiaoyucunx 69c0332e66 Update prompt: Code Review Specialist 2026-07-03 04:21:19 +00:00
cperalesg@gmail.com d25f8cb186 Update prompt: Prompt Generator 2026-07-03 04:21:18 +00:00
panda667 6fe34f8d57 Update prompt: Astrologer 2026-07-03 04:21:18 +00:00
joembolinas 0195410317 Update prompt: The Technical Co-Founder: Building Real Products Together 2026-07-03 04:21:17 +00:00
aymanrabeemac@gmail.com b434ed95e6 Update prompt: Code Review Specialist 2026-07-03 04:21:17 +00:00
aitank2020@gmail.com 3269a60d07 Update prompt: Echoes of the Rust Age 2026-07-03 04:21:16 +00:00
dragoy18@gmail.com 183e384c8e Update prompt: Code Review Specialist 2 2026-07-03 04:21:16 +00:00
lior1976@gmail.com 8bf038ffda Update prompt: Article Summarizer 2026-07-03 04:21:15 +00:00
beresasis@gmail.com a2f5610007 Update prompt: Interview Preparation Coach 2026-07-03 04:21:15 +00:00
sinansonmez 04ce958c90 Update prompt: Code Review Assistant 2026-07-03 04:21:14 +00:00
giorgiop c56a213b2c Update prompt: Virtual Doctor 2026-07-03 04:21:14 +00:00
IcyMost c0a44e6882 Add prompt: Comprehensive Book Summarizer 2026-07-02 04:28:20 +00:00
elpicoso c3af0fda90 Add prompt: Photography Trip Planning — Research-Backed Itinerary Builder 2026-07-02 04:28:20 +00:00
bcokdilli 67f0a7786a Add prompt: Parallel Agents With Goal 2026-07-02 04:28:20 +00:00
bcokdilli 5ea7b0f3b2 Add prompt: Plan Check Agent 2026-07-02 04:28:19 +00:00
624406266@qq.com 6e20fd332b Update prompt: Code Review Specialist 2026-07-02 04:28:19 +00:00
xiaoyucunx 689aee0b87 Update prompt: Code Review Specialist 2026-07-02 04:28:19 +00:00
fede.gazzelloni@gmail.com d78fc66766 Update prompt: Article Summarizer 2026-07-02 04:28:18 +00:00
debashis.sarker@gmail.com ece1304f97 Update prompt: The Technical Co-Founder: Building Real Products Together 2026-07-02 04:28:18 +00:00
aymanrabeemac@gmail.com 75ba85ef72 Update prompt: Code Review Specialist 2026-07-02 04:28:18 +00:00
nolanneff ea90b5f938 Update prompt: Code Review Specialist 2 2026-07-02 04:28:17 +00:00
ersinkoc da694b7851 Update prompt: Echoes of the Rust Age 2026-07-02 04:28:17 +00:00
cnwdy888@gmail.com e3a65a179b Update prompt: Interview Preparation Coach 2026-07-02 04:28:16 +00:00
guangzhongzhang978@gmail.com c40cf82d82 Update prompt: Virtual Doctor 2026-07-02 04:28:16 +00:00
f 1e5817a385 Update prompt: Code Review Assistant 2026-07-02 04:28:16 +00:00
devisasari 42d74c3589 Update prompt: Astrologer 2026-07-02 04:28:15 +00:00
iuzn 063a42c46b Update prompt: Prompt Generator 2026-07-02 04:28:15 +00:00
venoogopal@gmail.com 983ee1374c Add prompt: Storybook with stories creation 2026-07-01 04:36:16 +00:00
dh92fr@gmail.com 1eb3da16f8 Add prompt: React / Next.js Frontend Architect 2026-07-01 04:36:15 +00:00
IcyMost 90efa68bb5 Add prompt: Expert Discrete Mathematics Exam Answering 2026-07-01 04:36:15 +00:00
piyashossen11@gmail.com 755e30e876 Update prompt: Code Review Specialist 2026-07-01 04:36:14 +00:00
xiaoyucunx 706ec47f32 Update prompt: Code Review Specialist 2026-07-01 04:36:14 +00:00
cperalesg@gmail.com f024f334bf Update prompt: Prompt Generator 2026-07-01 04:36:13 +00:00
panda667 54c1ce4dd4 Update prompt: Astrologer 2026-07-01 04:36:13 +00:00
joembolinas a3ce00415f Update prompt: The Technical Co-Founder: Building Real Products Together 2026-07-01 04:36:12 +00:00
aymanrabeemac@gmail.com 3f50eb4cc4 Update prompt: Code Review Specialist 2026-07-01 04:36:12 +00:00
aitank2020@gmail.com fa6e6228ce Update prompt: Echoes of the Rust Age 2026-07-01 04:36:12 +00:00
dragoy18@gmail.com d9bc1a39b6 Update prompt: Code Review Specialist 2 2026-07-01 04:36:11 +00:00
lior1976@gmail.com 856608aa50 Update prompt: Article Summarizer 2026-07-01 04:36:11 +00:00
beresasis@gmail.com 7ee12c8265 Update prompt: Interview Preparation Coach 2026-07-01 04:36:10 +00:00
sinansonmez 7f2ee25ac3 Update prompt: Code Review Assistant 2026-07-01 04:36:10 +00:00
giorgiop 5ec5060763 Update prompt: Virtual Doctor 2026-07-01 04:36:09 +00:00
amvicioushecs 47ba973373 Add prompt: Personal Insight Analyzer from Past Chats 2026-06-30 04:30:14 +00:00
anishs1107@gmail.com 332ce78393 Add prompt: god mode 2026-06-30 04:30:14 +00:00
624406266@qq.com 34a19b51ac Update prompt: Code Review Specialist 2026-06-30 04:30:13 +00:00
xiaoyucunx 8df90232e7 Update prompt: Code Review Specialist 2026-06-30 04:30:13 +00:00
fede.gazzelloni@gmail.com 40b405b4c6 Update prompt: Article Summarizer 2026-06-30 04:30:13 +00:00
debashis.sarker@gmail.com 9090ba6f01 Update prompt: The Technical Co-Founder: Building Real Products Together 2026-06-30 04:30:12 +00:00
aymanrabeemac@gmail.com 90cf70b6d7 Update prompt: Code Review Specialist 2026-06-30 04:30:12 +00:00
nolanneff 9bb94bfed7 Update prompt: Code Review Specialist 2 2026-06-30 04:30:11 +00:00
ersinkoc 71bc8cca7b Update prompt: Echoes of the Rust Age 2026-06-30 04:30:11 +00:00
cnwdy888@gmail.com 3cc6585b6f Update prompt: Interview Preparation Coach 2026-06-30 04:30:10 +00:00
guangzhongzhang978@gmail.com c1c1aca41c Update prompt: Virtual Doctor 2026-06-30 04:30:10 +00:00
f 1204679b33 Update prompt: Code Review Assistant 2026-06-30 04:30:09 +00:00
devisasari ae730e1125 Update prompt: Astrologer 2026-06-30 04:30:09 +00:00
iuzn f6f6e003aa Update prompt: Prompt Generator 2026-06-30 04:30:08 +00:00
IcyMost 56d594b739 Add prompt: Empathetic and Supportive Friend 2026-06-29 04:36:43 +00:00
aprasedu@gmail.com 533c243103 Add prompt: Optical, Optometrist 2026-06-29 04:36:43 +00:00
IcyMost d7ffe98330 Add prompt: Casual Code Explanation Video Script 2026-06-29 04:36:42 +00:00
IcyMost 41d981ce2d Add prompt: Code Writing Specialist for Exams 2026-06-29 04:36:42 +00:00
piyashossen11@gmail.com d17299f64d Update prompt: Code Review Specialist 2026-06-29 04:36:42 +00:00
xiaoyucunx 68b2e264c8 Update prompt: Code Review Specialist 2026-06-29 04:36:41 +00:00
cperalesg@gmail.com 1d48dd9a2d Update prompt: Prompt Generator 2026-06-29 04:36:41 +00:00
panda667 35c2e287a8 Update prompt: Astrologer 2026-06-29 04:36:40 +00:00
joembolinas 8d08edeff5 Update prompt: The Technical Co-Founder: Building Real Products Together 2026-06-29 04:36:40 +00:00
aymanrabeemac@gmail.com 54c8435d82 Update prompt: Code Review Specialist 2026-06-29 04:36:39 +00:00
aitank2020@gmail.com 0c4e6ce5ba Update prompt: Echoes of the Rust Age 2026-06-29 04:36:39 +00:00
dragoy18@gmail.com 17c61c284f Update prompt: Code Review Specialist 2 2026-06-29 04:36:38 +00:00
lior1976@gmail.com 2c1df2e446 Update prompt: Article Summarizer 2026-06-29 04:36:38 +00:00
beresasis@gmail.com e5baa43440 Update prompt: Interview Preparation Coach 2026-06-29 04:36:37 +00:00
sinansonmez 593d60eb6e Update prompt: Code Review Assistant 2026-06-29 04:36:37 +00:00
giorgiop 629ebb17e5 Update prompt: Virtual Doctor 2026-06-29 04:36:36 +00:00
d2hitem@gmail.com 12e8d7fa13 Add prompt: person behaviour 2026-06-28 04:35:20 +00:00
adamsofea1111 2aacabbb2d Add prompt: Payment gateway page 2026-06-28 04:35:19 +00:00
skillsubhasis@gmail.com e7ce067ac2 Add prompt: Programming Logic Controller PLC interview questions and answers. Add S7400 Simens PLC and ABB PLC. 2026-06-28 04:35:19 +00:00
624406266@qq.com 159ef372b4 Update prompt: Code Review Specialist 2026-06-28 04:35:18 +00:00
xiaoyucunx 091fc01880 Update prompt: Code Review Specialist 2026-06-28 04:35:18 +00:00
fede.gazzelloni@gmail.com 65a5c0fe7b Update prompt: Article Summarizer 2026-06-28 04:35:17 +00:00
debashis.sarker@gmail.com a84df1b676 Update prompt: The Technical Co-Founder: Building Real Products Together 2026-06-28 04:35:17 +00:00
aymanrabeemac@gmail.com e927460e8a Update prompt: Code Review Specialist 2026-06-28 04:35:16 +00:00
nolanneff 691e5bd272 Update prompt: Code Review Specialist 2 2026-06-28 04:35:16 +00:00
ersinkoc 317eac2659 Update prompt: Echoes of the Rust Age 2026-06-28 04:35:16 +00:00
cnwdy888@gmail.com 698b19b97a Update prompt: Interview Preparation Coach 2026-06-28 04:35:15 +00:00
guangzhongzhang978@gmail.com d8d2e95e14 Update prompt: Virtual Doctor 2026-06-28 04:35:15 +00:00
f c0246f97cc Update prompt: Code Review Assistant 2026-06-28 04:35:14 +00:00
devisasari 53bf4e8efd Update prompt: Astrologer 2026-06-28 04:35:14 +00:00
iuzn 587b82a658 Update prompt: Prompt Generator 2026-06-28 04:35:13 +00:00
IcyMost 75b6f339e4 Add prompt: Python Auto Typer with Customizable Delay 2026-06-27 04:25:45 +00:00
IcyMost 5b20a01db8 Add prompt: Automated Text Typing Every 5 Minutes with Python 2026-06-27 04:25:45 +00:00
IcyMost 14b6f9d9a2 Add prompt: Sentence Expansion and Completion Assistant 2026-06-27 04:25:44 +00:00
thankcheeses 1a293c9974 Add prompt: Verbatim Chat to Organized Notes 2026-06-27 04:25:44 +00:00
IcyMost 88e72b9c1d Add prompt: Boost Engagement in Artistic Telegram Channels 2026-06-27 04:25:43 +00:00
IcyMost c329e8e3e9 Add prompt: Comprehensive Car Specifications and Upgrade Guide 2026-06-27 04:25:43 +00:00
IcyMost fe1838e7ab Add prompt: Heartfelt Message for a Friend 2026-06-27 04:25:42 +00:00
piyashossen11@gmail.com fdb14bfa0e Update prompt: Code Review Specialist 2026-06-27 04:25:42 +00:00
xiaoyucunx 25583bdd49 Update prompt: Code Review Specialist 2026-06-27 04:25:42 +00:00
cperalesg@gmail.com 15147956e6 Update prompt: Prompt Generator 2026-06-27 04:25:41 +00:00
panda667 cfaf348fc3 Update prompt: Astrologer 2026-06-27 04:25:41 +00:00
joembolinas 25b2b54d2c Update prompt: The Technical Co-Founder: Building Real Products Together 2026-06-27 04:25:40 +00:00
aymanrabeemac@gmail.com 35eec28c4b Update prompt: Code Review Specialist 2026-06-27 04:25:40 +00:00
aitank2020@gmail.com 95908935e4 Update prompt: Echoes of the Rust Age 2026-06-27 04:25:39 +00:00
dragoy18@gmail.com 6629226444 Update prompt: Code Review Specialist 2 2026-06-27 04:25:39 +00:00
lior1976@gmail.com 86f391ac1f Update prompt: Article Summarizer 2026-06-27 04:25:38 +00:00
beresasis@gmail.com b3614775f9 Update prompt: Interview Preparation Coach 2026-06-27 04:25:38 +00:00
sinansonmez 5bf37a7674 Update prompt: Code Review Assistant 2026-06-27 04:25:37 +00:00
giorgiop 8d526f55e1 Update prompt: Virtual Doctor 2026-06-27 04:25:37 +00:00
amvicioushecs 3021e60246 Add prompt: Sarcastic AI Personality 2026-06-26 04:32:54 +00:00
adamsofea1111 7c28219c5a Add prompt: Black Magic Mantra: Unleashing Creativity and Innovation 2026-06-26 04:32:54 +00:00
jd5293214@gmail.com 859a69a411 Add prompt: de 2026-06-26 04:32:53 +00:00
turhancan97 ad8fa84405 Add prompt: Chat Summary and Export Instructions 2026-06-26 04:32:53 +00:00
turhancan97 7cf1d4ab86 Add prompt: Meeting Summary and Action Plan Generator 2026-06-26 04:32:52 +00:00
624406266@qq.com 1c5dcb6010 Update prompt: Code Review Specialist 2026-06-26 04:32:52 +00:00
xiaoyucunx d1ac308015 Update prompt: Code Review Specialist 2026-06-26 04:32:51 +00:00
fede.gazzelloni@gmail.com 436850cf04 Update prompt: Article Summarizer 2026-06-26 04:32:51 +00:00
debashis.sarker@gmail.com 61590983b7 Update prompt: The Technical Co-Founder: Building Real Products Together 2026-06-26 04:32:50 +00:00
aymanrabeemac@gmail.com adf8bfa722 Update prompt: Code Review Specialist 2026-06-26 04:32:50 +00:00
nolanneff 09e58f3a26 Update prompt: Code Review Specialist 2 2026-06-26 04:32:49 +00:00
ersinkoc f1277605ad Update prompt: Echoes of the Rust Age 2026-06-26 04:32:49 +00:00
cnwdy888@gmail.com ee9a2db8f5 Update prompt: Interview Preparation Coach 2026-06-26 04:32:49 +00:00
guangzhongzhang978@gmail.com 601ef9fafe Update prompt: Virtual Doctor 2026-06-26 04:32:48 +00:00
f d8fd070c33 Update prompt: Code Review Assistant 2026-06-26 04:32:48 +00:00
devisasari 5416d49dac Update prompt: Astrologer 2026-06-26 04:32:47 +00:00
iuzn 3846ec964b Update prompt: Prompt Generator 2026-06-26 04:32:47 +00:00
adamsofea1111 2588522d56 Add prompt: Mirror Selfie Scene Description 2026-06-25 04:29:35 +00:00
adamsofea1111 d6bb79487b Add prompt: Create a Stunning Image 2026-06-25 04:29:34 +00:00
piyashossen11@gmail.com 36981cd6cb Update prompt: Code Review Specialist 2026-06-25 04:29:34 +00:00
xiaoyucunx 687a153251 Update prompt: Code Review Specialist 2026-06-25 04:29:33 +00:00
cperalesg@gmail.com 060c601154 Update prompt: Prompt Generator 2026-06-25 04:29:33 +00:00
panda667 cf3da27a04 Update prompt: Astrologer 2026-06-25 04:29:32 +00:00
joembolinas f9bd942f3f Update prompt: The Technical Co-Founder: Building Real Products Together 2026-06-25 04:29:32 +00:00
aymanrabeemac@gmail.com 97c8bf3749 Update prompt: Code Review Specialist 2026-06-25 04:29:32 +00:00
aitank2020@gmail.com 9ec5075de6 Update prompt: Echoes of the Rust Age 2026-06-25 04:29:31 +00:00
dragoy18@gmail.com 0f1b0ce76b Update prompt: Code Review Specialist 2 2026-06-25 04:29:31 +00:00
lior1976@gmail.com 776ab858a8 Update prompt: Article Summarizer 2026-06-25 04:29:30 +00:00
beresasis@gmail.com ccb3e0a91f Update prompt: Interview Preparation Coach 2026-06-25 04:29:30 +00:00
sinansonmez f762e596fe Update prompt: Code Review Assistant 2026-06-25 04:29:29 +00:00
giorgiop baebce15cb Update prompt: Virtual Doctor 2026-06-25 04:29:29 +00:00
mdshoharabhosen@gmail.com aa69d53d20 Add prompt: picture 2026-06-24 04:30:08 +00:00
adamsofea1111 3ae56259e1 Add prompt: Sabarudin System - Executive Architecture 2026-06-24 04:30:08 +00:00
IcyMost 28be6539ea Add prompt: Advanced Image Quality Enhancement 2026-06-24 04:30:07 +00:00
adamsofea1111 edaab56757 Add prompt: SABARUDIN INSTRUCTIONS FRAMEWORK 2026-06-24 04:30:07 +00:00
adarssshhh0-pixel 2de42b6d19 Add prompt: Vibe Coding with Modern Designs and SEO 2026-06-24 04:30:06 +00:00
IcyMost 47e2cf488b Add prompt: Custom Poster and Wallpaper Design with Image Upload 2026-06-24 04:30:06 +00:00
munniruna578@gmail.com 1a3e7e4fee Add prompt: Small 2026-06-24 04:30:05 +00:00
IcyMost b5a86c0be0 Update prompt: Spotify Playlist Cover Generator 2026-06-24 04:30:05 +00:00
624406266@qq.com b1163b067b Update prompt: Code Review Specialist 2026-06-24 04:30:05 +00:00
xiaoyucunx 20a6d3e15d Update prompt: Code Review Specialist 2026-06-24 04:30:04 +00:00
fede.gazzelloni@gmail.com 3dd830ca72 Update prompt: Article Summarizer 2026-06-24 04:30:04 +00:00
debashis.sarker@gmail.com fa9d4e54dd Update prompt: The Technical Co-Founder: Building Real Products Together 2026-06-24 04:30:03 +00:00
aymanrabeemac@gmail.com 48224e69f7 Update prompt: Code Review Specialist 2026-06-24 04:30:03 +00:00
nolanneff c29b2aa668 Update prompt: Code Review Specialist 2 2026-06-24 04:30:02 +00:00
ersinkoc 1e9224902d Update prompt: Echoes of the Rust Age 2026-06-24 04:30:02 +00:00
cnwdy888@gmail.com 820083a2f0 Update prompt: Interview Preparation Coach 2026-06-24 04:30:01 +00:00
guangzhongzhang978@gmail.com 84c15e7afe Update prompt: Virtual Doctor 2026-06-24 04:30:01 +00:00
f 89de14b04f Update prompt: Code Review Assistant 2026-06-24 04:30:01 +00:00
devisasari bbc6890cd5 Update prompt: Astrologer 2026-06-24 04:30:00 +00:00
iuzn 26ea85d5d7 Update prompt: Prompt Generator 2026-06-24 04:30:00 +00:00
IcyMost cf56362d8d Add prompt: Spotify Playlist Cover Generator 2026-06-23 04:27:59 +00:00
totalo-dev 48823cd163 Add prompt: Better Sufix Prompt 2026-06-23 04:27:58 +00:00
amvicioushecs 71851ad925 Add prompt: Creative Coloring Book Creations 2026-06-23 04:27:58 +00:00
ysamsonovich83@gmail.com 4f4fa19cc6 Add prompt: GitHub Repository Analyst 2026-06-23 04:27:57 +00:00
monaemk44@gmail.com b2865c8cf2 Add prompt: Action video 2026-06-23 04:27:57 +00:00
sakibillah2000@gmail.com bf77488b6b Add prompt: YouTube Channel Audit Expert 2026-06-23 04:27:57 +00:00
yasioz484@gmail.com 15bc668ad0 Add prompt: nos 2026-06-23 04:27:56 +00:00
duttavibhas@gmail.com 0bdc13110a Add prompt: Create This cool Doodles. 2026-06-23 04:27:56 +00:00
piyashossen11@gmail.com 2dadaf56cd Update prompt: Code Review Specialist 2026-06-23 04:27:55 +00:00
xiaoyucunx 6ae4c5c0de Update prompt: Code Review Specialist 2026-06-23 04:27:55 +00:00
cperalesg@gmail.com 459668178b Update prompt: Prompt Generator 2026-06-23 04:27:54 +00:00
panda667 b8550f767a Update prompt: Astrologer 2026-06-23 04:27:54 +00:00
joembolinas 6e6f4b3d2a Update prompt: The Technical Co-Founder: Building Real Products Together 2026-06-23 04:27:54 +00:00
aymanrabeemac@gmail.com eb7d810551 Update prompt: Code Review Specialist 2026-06-23 04:27:53 +00:00
aitank2020@gmail.com f443bc5a09 Update prompt: Echoes of the Rust Age 2026-06-23 04:27:53 +00:00
dragoy18@gmail.com 72cb29a04f Update prompt: Code Review Specialist 2 2026-06-23 04:27:52 +00:00
lior1976@gmail.com c9a17c9198 Update prompt: Article Summarizer 2026-06-23 04:27:52 +00:00
beresasis@gmail.com cfdf5d066d Update prompt: Interview Preparation Coach 2026-06-23 04:27:51 +00:00
sinansonmez 1f4b855942 Update prompt: Code Review Assistant 2026-06-23 04:27:51 +00:00
giorgiop b466bebbd2 Update prompt: Virtual Doctor 2026-06-23 04:27:50 +00:00
amvicioushecs abec3f76a3 Add prompt: Sales Funnel Builder from URL 2026-06-22 04:37:35 +00:00
gabrielpitrella@gmail.com 81dd4cd0bb Add prompt: Memxus Memory - Stop repeating yourself to AI 2026-06-22 04:37:35 +00:00
roger.williams.nz@gmail.com 8fe04d09a4 Add prompt: Cinematic Landscape Photography of Horse-Drawn Wagon 2026-06-22 04:37:34 +00:00
adamsofea1111 0290f98053 Add prompt: Mastering Leadership: 2026-06-22 04:37:34 +00:00
624406266@qq.com 8e2c318bfb Update prompt: Code Review Specialist 2026-06-22 04:37:34 +00:00
fede.gazzelloni@gmail.com 9aaea77b32 Update prompt: Article Summarizer 2026-06-22 04:37:33 +00:00
debashis.sarker@gmail.com 4e3380e2c1 Update prompt: The Technical Co-Founder: Building Real Products Together 2026-06-22 04:37:33 +00:00
aymanrabeemac@gmail.com 062f04b600 Update prompt: Code Review Specialist 2026-06-22 04:37:32 +00:00
nolanneff db426cce05 Update prompt: Code Review Specialist 2 2026-06-22 04:37:32 +00:00
ersinkoc 1691c3a4ec Update prompt: Echoes of the Rust Age 2026-06-22 04:37:31 +00:00
cnwdy888@gmail.com 332f6c2773 Update prompt: Interview Preparation Coach 2026-06-22 04:37:31 +00:00
guangzhongzhang978@gmail.com 5212ee5807 Update prompt: Virtual Doctor 2026-06-22 04:37:30 +00:00
f 7ae1b9f370 Update prompt: Code Review Assistant 2026-06-22 04:37:30 +00:00
devisasari bdae265eda Update prompt: Astrologer 2026-06-22 04:37:29 +00:00
iuzn 18ac70e20b Update prompt: Prompt Generator 2026-06-22 04:37:29 +00:00
amvicioushecs 22a2badf58 Add prompt: Premortem Analysis 2026-06-21 04:36:03 +00:00
xiaoyucunx bf157fc28f Update prompt: Code Review Specialist 2026-06-21 04:36:03 +00:00
cperalesg@gmail.com 3f4e552536 Update prompt: Prompt Generator 2026-06-21 04:36:02 +00:00
panda667 d0c3ec730f Update prompt: Astrologer 2026-06-21 04:36:02 +00:00
joembolinas f3184da366 Update prompt: The Technical Co-Founder: Building Real Products Together 2026-06-21 04:36:01 +00:00
aymanrabeemac@gmail.com 6082168955 Update prompt: Code Review Specialist 2026-06-21 04:36:01 +00:00
aitank2020@gmail.com 985cc9bf1d Update prompt: Echoes of the Rust Age 2026-06-21 04:36:00 +00:00
dragoy18@gmail.com 6bde45ccbb Update prompt: Code Review Specialist 2 2026-06-21 04:36:00 +00:00
lior1976@gmail.com 5b27d22b81 Update prompt: Article Summarizer 2026-06-21 04:35:59 +00:00
beresasis@gmail.com 50245b7e4b Update prompt: Interview Preparation Coach 2026-06-21 04:35:59 +00:00
sinansonmez ff6cdba76e Update prompt: Code Review Assistant 2026-06-21 04:35:58 +00:00
giorgiop 44dbd9aee9 Update prompt: Virtual Doctor 2026-06-21 04:35:58 +00:00
lorena.suarz@gmail.com 4aa13eff6e Add prompt: Fieldwork Analysis for Observational Participant Studies 2026-06-20 04:33:18 +00:00
sanjay9129445005@gmail.com 197f079b97 Add prompt: I want u think like virat kohli and analyze the ibps clerk exam in detail and find out the best possible way to clear it with every subject strategy 2026-06-20 04:33:18 +00:00
624406266@qq.com 32bb93f3fd Update prompt: Code Review Specialist 2026-06-20 04:33:17 +00:00
fede.gazzelloni@gmail.com a1e0808f88 Update prompt: Article Summarizer 2026-06-20 04:33:17 +00:00
debashis.sarker@gmail.com f683de3d09 Update prompt: The Technical Co-Founder: Building Real Products Together 2026-06-20 04:33:16 +00:00
aymanrabeemac@gmail.com fbf66048dd Update prompt: Code Review Specialist 2026-06-20 04:33:16 +00:00
nolanneff 13c90afdde Update prompt: Code Review Specialist 2 2026-06-20 04:33:16 +00:00
ersinkoc 0efbb8b2f0 Update prompt: Echoes of the Rust Age 2026-06-20 04:33:15 +00:00
cnwdy888@gmail.com 683ca6e50c Update prompt: Interview Preparation Coach 2026-06-20 04:33:15 +00:00
guangzhongzhang978@gmail.com 87c3e8cfe2 Update prompt: Virtual Doctor 2026-06-20 04:33:14 +00:00
f 941c4e4668 Update prompt: Code Review Assistant 2026-06-20 04:33:14 +00:00
devisasari 8a48e5823f Update prompt: Astrologer 2026-06-20 04:33:13 +00:00
iuzn a42fe72b0c Update prompt: Prompt Generator 2026-06-20 04:33:13 +00:00
esanchezp@uniguajira.edu.co ae2779379e Add prompt: Institutional Video Production Expert 2026-06-19 04:37:02 +00:00
thanos0000@gmail.com 543a928ef4 Update prompt: Session Continuity Engine 2026-06-19 04:37:01 +00:00
xiaoyucunx 2559cf3c97 Update prompt: Code Review Specialist 2026-06-19 04:37:01 +00:00
cperalesg@gmail.com 11a8d87caf Update prompt: Prompt Generator 2026-06-19 04:37:01 +00:00
panda667 697edabb5b Update prompt: Astrologer 2026-06-19 04:37:00 +00:00
joembolinas 833f92e815 Update prompt: The Technical Co-Founder: Building Real Products Together 2026-06-19 04:37:00 +00:00
aymanrabeemac@gmail.com dc586a1cc2 Update prompt: Code Review Specialist 2026-06-19 04:36:59 +00:00
aitank2020@gmail.com 88cb5ba66d Update prompt: Echoes of the Rust Age 2026-06-19 04:36:59 +00:00
dragoy18@gmail.com ae10f0502a Update prompt: Code Review Specialist 2 2026-06-19 04:36:58 +00:00
lior1976@gmail.com 142a9608fb Update prompt: Article Summarizer 2026-06-19 04:36:58 +00:00
beresasis@gmail.com 2e4f5921e2 Update prompt: Interview Preparation Coach 2026-06-19 04:36:57 +00:00
sinansonmez 4aa0da7422 Update prompt: Code Review Assistant 2026-06-19 04:36:57 +00:00
giorgiop a096680576 Update prompt: Virtual Doctor 2026-06-19 04:36:56 +00:00
puturayadani@gmail.com b31fc5b14a Remove prompt: for Rally 2026-06-19 04:36:56 +00:00
pusuknane@gmail.com be66cb6fa6 Add prompt: Apple Store ASO Expert Guide 2026-06-18 04:35:29 +00:00
thanos0000@gmail.com cb11a54a4c Update prompt: Session Continuity Engine 2026-06-18 04:35:29 +00:00
624406266@qq.com e43497dab4 Update prompt: Code Review Specialist 2026-06-18 04:35:28 +00:00
fede.gazzelloni@gmail.com 158506521e Update prompt: Article Summarizer 2026-06-18 04:35:28 +00:00
debashis.sarker@gmail.com 8d32f4de43 Update prompt: The Technical Co-Founder: Building Real Products Together 2026-06-18 04:35:28 +00:00
aymanrabeemac@gmail.com e27ca04ff0 Update prompt: Code Review Specialist 2026-06-18 04:35:27 +00:00
nolanneff e8beca0b27 Update prompt: Code Review Specialist 2 2026-06-18 04:35:27 +00:00
ersinkoc 89e9675fa2 Update prompt: Echoes of the Rust Age 2026-06-18 04:35:26 +00:00
cnwdy888@gmail.com 29e00ced68 Update prompt: Interview Preparation Coach 2026-06-18 04:35:26 +00:00
puturayadani@gmail.com c0c768d951 Update prompt: for Rally 2026-06-18 04:35:25 +00:00
guangzhongzhang978@gmail.com 59cbe0a88c Update prompt: Virtual Doctor 2026-06-18 04:35:25 +00:00
f 673a5cba4d Update prompt: Code Review Assistant 2026-06-18 04:35:24 +00:00
devisasari 76f7332485 Update prompt: Astrologer 2026-06-18 04:35:24 +00:00
iuzn 5413b48aab Update prompt: Prompt Generator 2026-06-18 04:35:23 +00:00
puturayadani@gmail.com c68110f67b Remove prompt: Yapper Twitter Strategist 2026
Co-authored-by: twinkletwinkleman2@gmail.com <twinkletwinkleman2@gmail.com>
2026-06-18 04:35:23 +00:00
7ct44rr2ps@privaterelay.appleid.com 14017a379f Add prompt: Oh 2026-06-17 04:36:04 +00:00
thanos0000@gmail.com 84eead5231 Update prompt: Session Continuity Engine 2026-06-17 04:36:03 +00:00
xiaoyucunx 0c617c1f8c Update prompt: Code Review Specialist 2026-06-17 04:36:03 +00:00
cperalesg@gmail.com 5976534b81 Update prompt: Prompt Generator 2026-06-17 04:36:02 +00:00
panda667 aafc94377e Update prompt: Astrologer 2026-06-17 04:36:02 +00:00
joembolinas cc7c0fddfc Update prompt: The Technical Co-Founder: Building Real Products Together 2026-06-17 04:36:01 +00:00
aymanrabeemac@gmail.com 8a413d86bb Update prompt: Code Review Specialist 2026-06-17 04:36:01 +00:00
aitank2020@gmail.com aac2d20dbe Update prompt: Echoes of the Rust Age 2026-06-17 04:36:00 +00:00
dragoy18@gmail.com feb8f5d09a Update prompt: Code Review Specialist 2 2026-06-17 04:36:00 +00:00
lior1976@gmail.com ba6320dd36 Update prompt: Article Summarizer 2026-06-17 04:35:59 +00:00
beresasis@gmail.com 31546067b8 Update prompt: Interview Preparation Coach 2026-06-17 04:35:59 +00:00
sinansonmez f69a3a8aa3 Update prompt: Code Review Assistant 2026-06-17 04:35:58 +00:00
giorgiop 9569c0a4bd Update prompt: Virtual Doctor 2026-06-17 04:35:58 +00:00
agenticforce.ceo@gmail.com 2f4991763d Add prompt: Luxury Beauty Product Infographics Creator 2026-06-16 04:38:27 +00:00
aldinei@gmail.com 2d7982f5e7 Add prompt: Fix LaTeX dollars 2026-06-16 04:38:27 +00:00
624406266@qq.com 35e1437894 Update prompt: Code Review Specialist 2026-06-16 04:38:27 +00:00
fede.gazzelloni@gmail.com e27b0b9e48 Update prompt: Article Summarizer 2026-06-16 04:38:26 +00:00
debashis.sarker@gmail.com c805ca40e4 Update prompt: The Technical Co-Founder: Building Real Products Together 2026-06-16 04:38:26 +00:00
aymanrabeemac@gmail.com 757ce73b2b Update prompt: Code Review Specialist 2026-06-16 04:38:25 +00:00
nolanneff 85e7d1e77f Update prompt: Code Review Specialist 2 2026-06-16 04:38:25 +00:00
ersinkoc 4cc76880ae Update prompt: Echoes of the Rust Age 2026-06-16 04:38:24 +00:00
cnwdy888@gmail.com 76ca57f720 Update prompt: Interview Preparation Coach 2026-06-16 04:38:24 +00:00
guangzhongzhang978@gmail.com e71616afac Update prompt: Virtual Doctor 2026-06-16 04:38:23 +00:00
f 4cfb7af08a Update prompt: Code Review Assistant 2026-06-16 04:38:23 +00:00
devisasari 6308701409 Update prompt: Astrologer 2026-06-16 04:38:22 +00:00
iuzn c4efa9c440 Update prompt: Prompt Generator 2026-06-16 04:38:22 +00:00
amvicioushecs 3dfdbd1aa0 Add prompt: Small Business Loan Broker Agent 2026-06-15 04:37:25 +00:00
amvicioushecs 4d17b23f48 Add prompt: Business Engineer Dashboard Creator 2026-06-15 04:37:25 +00:00
shahmanan815@gmail.com 4956f57a9e Add prompt: Create Marketing Videos for Magnifiscentss 2026-06-15 04:37:24 +00:00
senoldak 44dd01d336 Add prompt: Intricate Stippling Illustration of Istanbul Street Scene 2026-06-15 04:37:24 +00:00
senoldak 128324d96d Add prompt: Seinen Manga Masterpiece Transformation 2026-06-15 04:37:24 +00:00
aslaansnijder1990@gmail.com 981081b9f2 Add prompt: Pixel Art Prompt Generator 2026-06-15 04:37:23 +00:00
patelparthkumar@gecg28.ac.in 4e4b6922bd Add prompt: Prompt Optimization Review 2026-06-15 04:37:23 +00:00
xiaoyucunx 85f96df6f2 Update prompt: Code Review Specialist 2026-06-15 04:37:22 +00:00
cperalesg@gmail.com 1dc9bebc81 Update prompt: Prompt Generator 2026-06-15 04:37:22 +00:00
panda667 bae970949a Update prompt: Astrologer 2026-06-15 04:37:22 +00:00
joembolinas c656329ae7 Update prompt: The Technical Co-Founder: Building Real Products Together 2026-06-15 04:37:21 +00:00
aymanrabeemac@gmail.com a650f25f6e Update prompt: Code Review Specialist 2026-06-15 04:37:21 +00:00
aitank2020@gmail.com 6f20d58bb5 Update prompt: Echoes of the Rust Age 2026-06-15 04:37:20 +00:00
dragoy18@gmail.com d45dc4f039 Update prompt: Code Review Specialist 2 2026-06-15 04:37:20 +00:00
lior1976@gmail.com 5bf0dba364 Update prompt: Article Summarizer 2026-06-15 04:37:19 +00:00
beresasis@gmail.com dbae9b4163 Update prompt: Interview Preparation Coach 2026-06-15 04:37:19 +00:00
sinansonmez 9b3f429a67 Update prompt: Code Review Assistant 2026-06-15 04:37:18 +00:00
giorgiop 596ec78024 Update prompt: Virtual Doctor 2026-06-15 04:37:18 +00:00
624406266@qq.com ba416733d1 Update prompt: Code Review Specialist 2026-06-14 04:35:38 +00:00
fede.gazzelloni@gmail.com 1223f97941 Update prompt: Article Summarizer 2026-06-14 04:35:38 +00:00
debashis.sarker@gmail.com 5fc26cdac3 Update prompt: The Technical Co-Founder: Building Real Products Together 2026-06-14 04:35:37 +00:00
aymanrabeemac@gmail.com 959340b1ce Update prompt: Code Review Specialist 2026-06-14 04:35:37 +00:00
nolanneff f52697b0e7 Update prompt: Code Review Specialist 2 2026-06-14 04:35:36 +00:00
ersinkoc 7b00a5a33a Update prompt: Echoes of the Rust Age 2026-06-14 04:35:36 +00:00
cnwdy888@gmail.com b940c94a51 Update prompt: Interview Preparation Coach 2026-06-14 04:35:35 +00:00
guangzhongzhang978@gmail.com 3f5c8118bf Update prompt: Virtual Doctor 2026-06-14 04:35:35 +00:00
f 228581641b Update prompt: Code Review Assistant 2026-06-14 04:35:34 +00:00
devisasari a00ae1d566 Update prompt: Astrologer 2026-06-14 04:35:34 +00:00
iuzn 5f58a78c64 Update prompt: Prompt Generator 2026-06-14 04:35:33 +00:00
oliver.skravan@googlemail.com adec4b481b Add prompt: Exclusive Warm Weather Getaway 2026-06-13 04:34:26 +00:00
bobbysunday44-maker d421b31032 Add prompt: RFQ 2026-06-13 04:34:26 +00:00
ajillell_uhg fe01049dba Add prompt: remove current vnet 2026-06-13 04:34:25 +00:00
reyvannshz 3a86e43143 Add prompt: SWAP MENU EXTERNAL C++ 2026-06-13 04:34:25 +00:00
daiwhmiao ea4c1ba1b6 Add prompt: Name and Prompt for Digital Avatar Application 2026-06-13 04:34:25 +00:00
sanjay9129445005@gmail.com 7e2b7e9089 Add prompt: Making basic MCQ questions for entrance 2026-06-13 04:34:24 +00:00
xiaoyucunx 35e462085f Update prompt: Code Review Specialist 2026-06-13 04:34:24 +00:00
cperalesg@gmail.com 6a467fc123 Update prompt: Prompt Generator 2026-06-13 04:34:23 +00:00
panda667 26bac76e86 Update prompt: Astrologer 2026-06-13 04:34:23 +00:00
joembolinas 94559bfaf0 Update prompt: The Technical Co-Founder: Building Real Products Together 2026-06-13 04:34:22 +00:00
aymanrabeemac@gmail.com 4577947362 Update prompt: Code Review Specialist 2026-06-13 04:34:22 +00:00
aitank2020@gmail.com 0efdd88ae3 Update prompt: Echoes of the Rust Age 2026-06-13 04:34:21 +00:00
dragoy18@gmail.com 5c509e0cb5 Update prompt: Code Review Specialist 2 2026-06-13 04:34:21 +00:00
lior1976@gmail.com 75dba60c04 Update prompt: Article Summarizer 2026-06-13 04:34:20 +00:00
beresasis@gmail.com 282e1e5659 Update prompt: Interview Preparation Coach 2026-06-13 04:34:20 +00:00
sinansonmez 8ae8bda6e2 Update prompt: Code Review Assistant 2026-06-13 04:34:19 +00:00
giorgiop 6bd34b6bcb Update prompt: Virtual Doctor 2026-06-13 04:34:19 +00:00
amvicioushecs c0c21824d4 Add prompt: Act as a Startup Co-Founder 2026-06-12 04:35:10 +00:00
bariskarakaya5534@gmail.com be235a85d5 Update prompt: Android AI App Security Specialist Task 2026-06-12 04:35:10 +00:00
624406266@qq.com b32a72dac5 Update prompt: Code Review Specialist 2026-06-12 04:35:09 +00:00
fede.gazzelloni@gmail.com a0ef3966b9 Update prompt: Article Summarizer 2026-06-12 04:35:09 +00:00
debashis.sarker@gmail.com 94c8424db2 Update prompt: The Technical Co-Founder: Building Real Products Together 2026-06-12 04:35:08 +00:00
aymanrabeemac@gmail.com 9eaa334364 Update prompt: Code Review Specialist 2026-06-12 04:35:08 +00:00
nolanneff 14da316ea7 Update prompt: Code Review Specialist 2 2026-06-12 04:35:07 +00:00
ersinkoc b1752a0875 Update prompt: Echoes of the Rust Age 2026-06-12 04:35:07 +00:00
cnwdy888@gmail.com cad618942a Update prompt: Interview Preparation Coach 2026-06-12 04:35:06 +00:00
guangzhongzhang978@gmail.com 795beb9d25 Update prompt: Virtual Doctor 2026-06-12 04:35:06 +00:00
f 2e05060800 Update prompt: Code Review Assistant 2026-06-12 04:35:06 +00:00
devisasari 880298d6c0 Update prompt: Astrologer 2026-06-12 04:35:05 +00:00
iuzn 3d8c1d6eb8 Update prompt: Prompt Generator 2026-06-12 04:35:05 +00:00
sagar.blogs.googl@gmail.com 61d04df01c Add prompt: Social Media Post Analyzer 2026-06-11 04:35:28 +00:00
nunolevadm@gmail.com 33a4f79757 Add prompt: Automated Time Tracking via Image Recognition 2026-06-11 04:35:28 +00:00
xiaoyucunx a4de599832 Update prompt: Code Review Specialist 2026-06-11 04:35:28 +00:00
cperalesg@gmail.com b76085ba11 Update prompt: Prompt Generator 2026-06-11 04:35:27 +00:00
panda667 ef145d3046 Update prompt: Astrologer 2026-06-11 04:35:27 +00:00
joembolinas 52337b9592 Update prompt: The Technical Co-Founder: Building Real Products Together 2026-06-11 04:35:26 +00:00
aymanrabeemac@gmail.com abd4b94441 Update prompt: Code Review Specialist 2026-06-11 04:35:26 +00:00
aitank2020@gmail.com 5790509538 Update prompt: Echoes of the Rust Age 2026-06-11 04:35:25 +00:00
dragoy18@gmail.com 42838f5187 Update prompt: Code Review Specialist 2 2026-06-11 04:35:25 +00:00
lior1976@gmail.com 02d04439df Update prompt: Article Summarizer 2026-06-11 04:35:24 +00:00
beresasis@gmail.com aac6e24806 Update prompt: Interview Preparation Coach 2026-06-11 04:35:24 +00:00
sinansonmez f3a102d89b Update prompt: Code Review Assistant 2026-06-11 04:35:23 +00:00
giorgiop 7e7a5582fc Update prompt: Virtual Doctor 2026-06-11 04:35:23 +00:00
ticarollamas-arch 43e0117ec5 Add prompt: Plataforma Escopo Bugbouty Cyber Hunter Lab 2026-06-10 04:34:46 +00:00
ydofodjjfofyjey@gmail.com 02c9b01ee8 Add prompt: Best mentor 2026-06-10 04:34:45 +00:00
saiedabdelrazzaq@gmail.com 11c0bbdc4f Add prompt: hewar 2026-06-10 04:34:45 +00:00
624406266@qq.com 3a2b05c426 Update prompt: Code Review Specialist 2026-06-10 04:34:44 +00:00
fede.gazzelloni@gmail.com 274ac15d76 Update prompt: Article Summarizer 2026-06-10 04:34:44 +00:00
debashis.sarker@gmail.com a6530b98b8 Update prompt: The Technical Co-Founder: Building Real Products Together 2026-06-10 04:34:43 +00:00
aymanrabeemac@gmail.com e48caa99b8 Update prompt: Code Review Specialist 2026-06-10 04:34:43 +00:00
nolanneff d3f2b05bbb Update prompt: Code Review Specialist 2 2026-06-10 04:34:43 +00:00
ersinkoc ce4fa9df44 Update prompt: Echoes of the Rust Age 2026-06-10 04:34:42 +00:00
cnwdy888@gmail.com 6d3448b8c3 Update prompt: Interview Preparation Coach 2026-06-10 04:34:42 +00:00
guangzhongzhang978@gmail.com 9707c67911 Update prompt: Virtual Doctor 2026-06-10 04:34:41 +00:00
f 3c6e6ef870 Update prompt: Code Review Assistant 2026-06-10 04:34:41 +00:00
devisasari b76e8689ee Update prompt: Astrologer 2026-06-10 04:34:40 +00:00
iuzn 304b7bcf4e Update prompt: Prompt Generator 2026-06-10 04:34:40 +00:00
updalla-apshir c3d20f876a Add prompt: Improve documentation wording and fix GitHub link 2026-06-09 04:29:37 +00:00
farias.andreluiz@gmail.com c301779e51 Add prompt: shadcn Component Adapter for Cursor 2026-06-09 04:29:36 +00:00
farias.andreluiz@gmail.com 4bdbfbdae7 Add prompt: 21st.dev component prompt 2026-06-09 04:29:36 +00:00
dongxuanzhe@gmail.com cd8ed41804 Add prompt: requirement-analysis-and-planning-agent 2026-06-09 04:29:35 +00:00
farias.andreluiz@gmail.com e017d33d12 Update prompt: Learn quiz session
Co-authored-by: f <f@users.noreply.github.com>
2026-06-09 04:29:35 +00:00
xiaoyucunx 35ec417e6d Update prompt: Code Review Specialist 2026-06-09 04:29:34 +00:00
cperalesg@gmail.com e10be4316a Update prompt: Prompt Generator 2026-06-09 04:29:34 +00:00
panda667 2aed1f22b2 Update prompt: Astrologer 2026-06-09 04:29:33 +00:00
joembolinas 1d3cd2b222 Update prompt: The Technical Co-Founder: Building Real Products Together 2026-06-09 04:29:33 +00:00
aymanrabeemac@gmail.com 143a4b3435 Update prompt: Code Review Specialist 2026-06-09 04:29:32 +00:00
aitank2020@gmail.com 35b6971f68 Update prompt: Echoes of the Rust Age 2026-06-09 04:29:32 +00:00
dragoy18@gmail.com 625157c37e Update prompt: Code Review Specialist 2 2026-06-09 04:29:32 +00:00
lior1976@gmail.com d71b1800cd Update prompt: Article Summarizer 2026-06-09 04:29:31 +00:00
beresasis@gmail.com 04ff7d5e62 Update prompt: Interview Preparation Coach 2026-06-09 04:29:31 +00:00
sinansonmez b8bd49949b Update prompt: Code Review Assistant 2026-06-09 04:29:30 +00:00
giorgiop 7f933bda74 Update prompt: Virtual Doctor 2026-06-09 04:29:30 +00:00
kkenwway@gmail.com a63bec1586 Add prompt: Football 2026-06-08 04:36:19 +00:00
vaibhavshastri48514@gmail.com 9e395b5d70 Add prompt: TVS raider 2026-06-08 04:36:19 +00:00
randomruffneck89@gmail.com 01aa417205 Update prompt: CHARACTER SHEET
Co-authored-by: f <f@users.noreply.github.com>
2026-06-08 04:36:18 +00:00
624406266@qq.com ccd79a6011 Update prompt: Code Review Specialist 2026-06-08 04:36:18 +00:00
fede.gazzelloni@gmail.com ac10b1a435 Update prompt: Article Summarizer 2026-06-08 04:36:17 +00:00
debashis.sarker@gmail.com dfd5ac21a8 Update prompt: The Technical Co-Founder: Building Real Products Together 2026-06-08 04:36:17 +00:00
aymanrabeemac@gmail.com c5ca8e7044 Update prompt: Code Review Specialist 2026-06-08 04:36:16 +00:00
nolanneff a5779f2bdd Update prompt: Code Review Specialist 2 2026-06-08 04:36:16 +00:00
ersinkoc 73924a7cd0 Update prompt: Echoes of the Rust Age 2026-06-08 04:36:15 +00:00
cnwdy888@gmail.com 5cf85618ec Update prompt: Interview Preparation Coach 2026-06-08 04:36:15 +00:00
guangzhongzhang978@gmail.com 6bcef009d5 Update prompt: Virtual Doctor 2026-06-08 04:36:14 +00:00
f b02b50769f Update prompt: Code Review Assistant 2026-06-08 04:36:14 +00:00
devisasari 780a99c620 Update prompt: Astrologer 2026-06-08 04:36:13 +00:00
iuzn acd83703f7 Update prompt: Prompt Generator 2026-06-08 04:36:13 +00:00
donlloydthejeweler@gmail.com 0945cd47e0 Add prompt: 3D FACTORY 2026-06-07 04:35:17 +00:00
xiaoyucunx 9080952b5e Update prompt: Code Review Specialist 2026-06-07 04:35:16 +00:00
cperalesg@gmail.com 15edd9ddd8 Update prompt: Prompt Generator 2026-06-07 04:35:16 +00:00
panda667 8cb038551a Update prompt: Astrologer 2026-06-07 04:35:15 +00:00
joembolinas 11b1121aff Update prompt: The Technical Co-Founder: Building Real Products Together 2026-06-07 04:35:15 +00:00
aymanrabeemac@gmail.com b5c864a1e3 Update prompt: Code Review Specialist 2026-06-07 04:35:14 +00:00
aitank2020@gmail.com cb37488928 Update prompt: Echoes of the Rust Age 2026-06-07 04:35:14 +00:00
dragoy18@gmail.com d36c26fe10 Update prompt: Code Review Specialist 2 2026-06-07 04:35:14 +00:00
lior1976@gmail.com 870803dda6 Update prompt: Article Summarizer 2026-06-07 04:35:13 +00:00
beresasis@gmail.com d0a802e08b Update prompt: Interview Preparation Coach 2026-06-07 04:35:13 +00:00
sinansonmez 8dd81baaa0 Update prompt: Code Review Assistant 2026-06-07 04:35:12 +00:00
giorgiop 5bb7315846 Update prompt: Virtual Doctor 2026-06-07 04:35:12 +00:00
farias.andreluiz@gmail.com c0a0091fc8 Add prompt: Design Brief 2026-06-06 04:26:55 +00:00
bariskarakaya5534@gmail.com 62f794f394 Add prompt: Android AI App Security Specialist Task 2026-06-06 04:26:54 +00:00
amvicioushecs 3f6e87b480 Add prompt: Idea Validation and Scoring Market Research Prompt 2026-06-06 04:26:54 +00:00
shahmanan815@gmail.com b3b7fb9bcc Add prompt: Non-Medical Expense Calculator for Hospital Bills 2026-06-06 04:26:54 +00:00
624406266@qq.com 36f86db98e Update prompt: Code Review Specialist 2026-06-06 04:26:53 +00:00
fede.gazzelloni@gmail.com 75513eec4e Update prompt: Article Summarizer 2026-06-06 04:26:53 +00:00
debashis.sarker@gmail.com f3bb9b598d Update prompt: The Technical Co-Founder: Building Real Products Together 2026-06-06 04:26:52 +00:00
aymanrabeemac@gmail.com ca94b728e8 Update prompt: Code Review Specialist 2026-06-06 04:26:52 +00:00
nolanneff 49cc0ca866 Update prompt: Code Review Specialist 2 2026-06-06 04:26:51 +00:00
ersinkoc 25748f05ca Update prompt: Echoes of the Rust Age 2026-06-06 04:26:51 +00:00
cnwdy888@gmail.com 513d0fe07a Update prompt: Interview Preparation Coach 2026-06-06 04:26:51 +00:00
guangzhongzhang978@gmail.com 493d636c2b Update prompt: Virtual Doctor 2026-06-06 04:26:50 +00:00
f 09a8934b69 Update prompt: Code Review Assistant 2026-06-06 04:26:50 +00:00
devisasari 4cca4b9fc7 Update prompt: Astrologer 2026-06-06 04:26:49 +00:00
iuzn afd4b50571 Update prompt: Prompt Generator 2026-06-06 04:26:49 +00:00
ilkerulusoy ab60f7ab15 Add prompt: iOS Localization File Translation 2026-06-05 04:34:06 +00:00
xiaoyucunx c2b816746a Update prompt: Code Review Specialist 2026-06-05 04:34:05 +00:00
cperalesg@gmail.com f2101f5ba8 Update prompt: Prompt Generator 2026-06-05 04:34:05 +00:00
panda667 fff7b28f9e Update prompt: Astrologer 2026-06-05 04:34:04 +00:00
joembolinas cfc74c17d3 Update prompt: The Technical Co-Founder: Building Real Products Together 2026-06-05 04:34:04 +00:00
aymanrabeemac@gmail.com 87d83d2f27 Update prompt: Code Review Specialist 2026-06-05 04:34:03 +00:00
aitank2020@gmail.com 521b8fbd19 Update prompt: Echoes of the Rust Age 2026-06-05 04:34:03 +00:00
dragoy18@gmail.com 70fe6a319e Update prompt: Code Review Specialist 2 2026-06-05 04:34:02 +00:00
lior1976@gmail.com 876c0ac56d Update prompt: Article Summarizer 2026-06-05 04:34:02 +00:00
beresasis@gmail.com 2218f50ddf Update prompt: Interview Preparation Coach 2026-06-05 04:34:02 +00:00
sinansonmez d16e9b25f9 Update prompt: Code Review Assistant 2026-06-05 04:34:01 +00:00
giorgiop 481c68d6b4 Update prompt: Virtual Doctor 2026-06-05 04:34:01 +00:00
f e3b01f7f9d Add prompt: Conference Invitation Email 2026-06-04 04:35:05 +00:00
f ca8c228de2 Update prompt: Realistic Amateur Phone Photo with WhatsApp Chat
Co-authored-by: ekmekcicaner <ekmekcicaner@users.noreply.github.com>
2026-06-04 04:35:05 +00:00
624406266@qq.com 5d90d67d89 Update prompt: Code Review Specialist 2026-06-04 04:35:04 +00:00
fede.gazzelloni@gmail.com 5615aaf16a Update prompt: Article Summarizer 2026-06-04 04:35:04 +00:00
debashis.sarker@gmail.com c3d52c3f7a Update prompt: The Technical Co-Founder: Building Real Products Together 2026-06-04 04:35:03 +00:00
aymanrabeemac@gmail.com c047c92af8 Update prompt: Code Review Specialist 2026-06-04 04:35:03 +00:00
nolanneff 08977662e0 Update prompt: Code Review Specialist 2 2026-06-04 04:35:02 +00:00
ersinkoc 72fc1de72a Update prompt: Echoes of the Rust Age 2026-06-04 04:35:02 +00:00
cnwdy888@gmail.com 07aa5b05de Update prompt: Interview Preparation Coach 2026-06-04 04:35:01 +00:00
guangzhongzhang978@gmail.com d9f58da835 Update prompt: Virtual Doctor 2026-06-04 04:35:01 +00:00
f 181f0a0fd0 Update prompt: Code Review Assistant 2026-06-04 04:35:00 +00:00
devisasari 581f551d54 Update prompt: Astrologer 2026-06-04 04:35:00 +00:00
iuzn 9c40e1999f Update prompt: Prompt Generator 2026-06-04 04:34:59 +00:00
elizakas84@gmail.com 244cea5928 Add prompt: Bf 2026-06-03 04:36:01 +00:00
gk0415439@gmail.com 660a2dc86f Add prompt: Dummy Test Prompt 2026-06-03 04:36:00 +00:00
xiaoyucunx 67538fef10 Update prompt: Code Review Specialist 2026-06-03 04:36:00 +00:00
cperalesg@gmail.com fb461bf21e Update prompt: Prompt Generator 2026-06-03 04:36:00 +00:00
panda667 c1d58a95b9 Update prompt: Astrologer 2026-06-03 04:35:59 +00:00
joembolinas 798742c2bb Update prompt: The Technical Co-Founder: Building Real Products Together 2026-06-03 04:35:59 +00:00
aymanrabeemac@gmail.com 8fbffa653b Update prompt: Code Review Specialist 2026-06-03 04:35:58 +00:00
aitank2020@gmail.com a7a16af610 Update prompt: Echoes of the Rust Age 2026-06-03 04:35:58 +00:00
dragoy18@gmail.com 2e2b21313b Update prompt: Code Review Specialist 2 2026-06-03 04:35:57 +00:00
lior1976@gmail.com e40b8a1f64 Update prompt: Article Summarizer 2026-06-03 04:35:57 +00:00
beresasis@gmail.com 663c0ed379 Update prompt: Interview Preparation Coach 2026-06-03 04:35:56 +00:00
sinansonmez e576b059bf Update prompt: Code Review Assistant 2026-06-03 04:35:56 +00:00
giorgiop 707f817f3a Update prompt: Virtual Doctor 2026-06-03 04:35:55 +00:00
Fatih Kadir Akın 06da77737a fix: add VS Code Copilot Chat deep links (#1198)
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-06-03 02:41:17 +03:00
farias.andreluiz@gmail.com b2bae3c856 Add prompt: Learn quiz session 2026-06-02 04:35:04 +00:00
umaarmirzaa 069f8e34a7 Add prompt: Act as an Elite Course Mastery Tutor 2026-06-02 04:35:04 +00:00
kennethmaeann@gmail.com 4802ba6f89 Add prompt: GRAPHICS 2026-06-02 04:35:03 +00:00
training002025@gmail.com 5a8c7d8f46 Add prompt: Write an Email 2026-06-02 04:35:03 +00:00
clintonuzoh@gmail.com 44291fa261 Add prompt: Draft a 2-week plan on the basic skills of computer knowledge for a company that has outlets across the country 2026-06-02 04:35:02 +00:00
jovemexausto 6d269cfc67 Add prompt: Crafting the Ultimate Question for Maximum Value Creation 2026-06-02 04:35:02 +00:00
624406266@qq.com ae8ac6ae22 Update prompt: Code Review Specialist 2026-06-02 04:35:02 +00:00
thanos0000@gmail.com 471caaf696 Update prompt: Job Posting Snapshot & Preservation Engine 2026-06-02 04:35:01 +00:00
fede.gazzelloni@gmail.com 7c46ea5303 Update prompt: Article Summarizer 2026-06-02 04:35:01 +00:00
debashis.sarker@gmail.com 6c9a3f677e Update prompt: The Technical Co-Founder: Building Real Products Together 2026-06-02 04:35:00 +00:00
aymanrabeemac@gmail.com 12aae5f1fc Update prompt: Code Review Specialist 2026-06-02 04:35:00 +00:00
nolanneff 57d634e002 Update prompt: Code Review Specialist 2 2026-06-02 04:34:59 +00:00
ersinkoc 5cfdc52694 Update prompt: Echoes of the Rust Age 2026-06-02 04:34:59 +00:00
cnwdy888@gmail.com b667eb9ff5 Update prompt: Interview Preparation Coach 2026-06-02 04:34:58 +00:00
guangzhongzhang978@gmail.com c5c3fc7138 Update prompt: Virtual Doctor 2026-06-02 04:34:58 +00:00
f 77cb04b4a9 Update prompt: Code Review Assistant 2026-06-02 04:34:58 +00:00
devisasari e23e48091b Update prompt: Astrologer 2026-06-02 04:34:57 +00:00
iuzn fc952128c3 Update prompt: Prompt Generator 2026-06-02 04:34:57 +00:00
adediwuratemitope9-tech a0318845d7 Add prompt: Nigeria 2026-06-01 04:37:36 +00:00
xiaoyucunx b4b5e3fa5e Update prompt: Code Review Specialist 2026-06-01 04:37:35 +00:00
cperalesg@gmail.com 42b7d6bd60 Update prompt: Prompt Generator 2026-06-01 04:37:35 +00:00
panda667 b5c2ce5984 Update prompt: Astrologer 2026-06-01 04:37:34 +00:00
joembolinas 18bb16471b Update prompt: The Technical Co-Founder: Building Real Products Together 2026-06-01 04:37:34 +00:00
aymanrabeemac@gmail.com 1889dd1f54 Update prompt: Code Review Specialist 2026-06-01 04:37:33 +00:00
aitank2020@gmail.com cb3316b219 Update prompt: Echoes of the Rust Age 2026-06-01 04:37:33 +00:00
dragoy18@gmail.com f6fa17ec92 Update prompt: Code Review Specialist 2 2026-06-01 04:37:33 +00:00
lior1976@gmail.com 828411abf1 Update prompt: Article Summarizer 2026-06-01 04:37:32 +00:00
beresasis@gmail.com a0d36381f8 Update prompt: Interview Preparation Coach 2026-06-01 04:37:32 +00:00
sinansonmez 4a47f4f514 Update prompt: Code Review Assistant 2026-06-01 04:37:31 +00:00
giorgiop 29c97223d5 Update prompt: Virtual Doctor 2026-06-01 04:37:31 +00:00
Fatih Kadir Akın 6028f3f024 Add Neon as sponsor and recommended database (#1192)
* Add Neon docs and remove website ads

Co-authored-by: Fatih Kadir Akın <fka@fka.dev>

* Fix run prompt callback dependencies

Co-authored-by: Fatih Kadir Akın <fka@fka.dev>

* Remove run menu sponsor treatment

Co-authored-by: Fatih Kadir Akın <fka@fka.dev>

* Fix run prompt callback dependencies

Co-authored-by: Fatih Kadir Akın <fka@fka.dev>

* Add Neon as sponsor

Co-authored-by: Fatih Kadir Akın <fka@fka.dev>

---------

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
2026-05-31 21:58:54 +03:00
624406266@qq.com 696e253ca6 Update prompt: Code Review Specialist 2026-05-31 04:34:53 +00:00
fede.gazzelloni@gmail.com 66a7374549 Update prompt: Article Summarizer 2026-05-31 04:34:52 +00:00
debashis.sarker@gmail.com 2af69998ff Update prompt: The Technical Co-Founder: Building Real Products Together 2026-05-31 04:34:52 +00:00
aymanrabeemac@gmail.com a6f59047ce Update prompt: Code Review Specialist 2026-05-31 04:34:51 +00:00
nolanneff e27964397c Update prompt: Code Review Specialist 2 2026-05-31 04:34:51 +00:00
ersinkoc f49a4b855d Update prompt: Echoes of the Rust Age 2026-05-31 04:34:50 +00:00
cnwdy888@gmail.com d3fe56995e Update prompt: Interview Preparation Coach 2026-05-31 04:34:50 +00:00
guangzhongzhang978@gmail.com 6643b5b48c Update prompt: Virtual Doctor 2026-05-31 04:34:50 +00:00
f 52189bf0e0 Update prompt: Code Review Assistant 2026-05-31 04:34:49 +00:00
devisasari 93b7d3ab6c Update prompt: Astrologer 2026-05-31 04:34:49 +00:00
iuzn 5f9dec8bbd Update prompt: Prompt Generator 2026-05-31 04:34:48 +00:00
rajputbhanupratap2007@gmail.com 6ea731201c Add prompt: . 2026-05-30 04:25:57 +00:00
divyeshpatel465@gmail.com ea2c770cb0 Add prompt: Power BI 2026-05-30 04:25:57 +00:00
xiaoyucunx b1e0afe0b9 Update prompt: Code Review Specialist 2026-05-30 04:25:56 +00:00
cperalesg@gmail.com e4fc1abcde Update prompt: Prompt Generator 2026-05-30 04:25:56 +00:00
panda667 9aedb502d1 Update prompt: Astrologer 2026-05-30 04:25:55 +00:00
joembolinas 34185ef68c Update prompt: The Technical Co-Founder: Building Real Products Together 2026-05-30 04:25:55 +00:00
aymanrabeemac@gmail.com cd63f1a21d Update prompt: Code Review Specialist 2026-05-30 04:25:55 +00:00
aitank2020@gmail.com d9c24a8de1 Update prompt: Echoes of the Rust Age 2026-05-30 04:25:54 +00:00
dragoy18@gmail.com ec3d7e89cf Update prompt: Code Review Specialist 2 2026-05-30 04:25:54 +00:00
lior1976@gmail.com 7fcb91085a Update prompt: Article Summarizer 2026-05-30 04:25:53 +00:00
beresasis@gmail.com 5893ffd50b Update prompt: Interview Preparation Coach 2026-05-30 04:25:53 +00:00
sinansonmez 2e8d76ac7b Update prompt: Code Review Assistant 2026-05-30 04:25:52 +00:00
giorgiop a6b70243b7 Update prompt: Virtual Doctor 2026-05-30 04:25:52 +00:00
samyhm2432@gmail.com 249eda1a30 Add prompt: Personalized Exam Preparation Tutor 2026-05-29 04:33:22 +00:00
soultanzmanou@gmail.com d8eafffc84 Add prompt: فريق العمل 2026-05-29 04:33:22 +00:00
frarhrashd@gmail.com 79e0ebd50c Add prompt: Building a Comprehensive Programming Team 2026-05-29 04:33:21 +00:00
624406266@qq.com f7b87e78a0 Update prompt: Code Review Specialist 2026-05-29 04:33:21 +00:00
fede.gazzelloni@gmail.com 5dacad0400 Update prompt: Article Summarizer 2026-05-29 04:33:20 +00:00
debashis.sarker@gmail.com e8d9d0314b Update prompt: The Technical Co-Founder: Building Real Products Together 2026-05-29 04:33:20 +00:00
aymanrabeemac@gmail.com 9c92a8936b Update prompt: Code Review Specialist 2026-05-29 04:33:19 +00:00
nolanneff 830ab886fa Update prompt: Code Review Specialist 2 2026-05-29 04:33:19 +00:00
ersinkoc 7472bf1777 Update prompt: Echoes of the Rust Age 2026-05-29 04:33:18 +00:00
cnwdy888@gmail.com 28244fc60b Update prompt: Interview Preparation Coach 2026-05-29 04:33:18 +00:00
guangzhongzhang978@gmail.com 7a7e018362 Update prompt: Virtual Doctor 2026-05-29 04:33:18 +00:00
f 8a69692ada Update prompt: Code Review Assistant 2026-05-29 04:33:17 +00:00
devisasari 2c85f43ef5 Update prompt: Astrologer 2026-05-29 04:33:17 +00:00
iuzn 94299a681b Update prompt: Prompt Generator 2026-05-29 04:33:16 +00:00
grantcarthew 4ad9ab4c50 Add prompt: Principled 2026-05-28 04:32:10 +00:00
xiaoyucunx 8f5dfd0737 Update prompt: Code Review Specialist 2026-05-28 04:32:09 +00:00
cperalesg@gmail.com 0f43f15373 Update prompt: Prompt Generator 2026-05-28 04:32:09 +00:00
panda667 a7546b5450 Update prompt: Astrologer 2026-05-28 04:32:08 +00:00
joembolinas b3f6bebfb3 Update prompt: The Technical Co-Founder: Building Real Products Together 2026-05-28 04:32:08 +00:00
aymanrabeemac@gmail.com a1afb64d70 Update prompt: Code Review Specialist 2026-05-28 04:32:08 +00:00
aitank2020@gmail.com 89f2551228 Update prompt: Echoes of the Rust Age 2026-05-28 04:32:07 +00:00
dragoy18@gmail.com ca0e02c59c Update prompt: Code Review Specialist 2 2026-05-28 04:32:07 +00:00
lior1976@gmail.com 35f049ec0d Update prompt: Article Summarizer 2026-05-28 04:32:06 +00:00
beresasis@gmail.com 77083e8297 Update prompt: Interview Preparation Coach 2026-05-28 04:32:06 +00:00
sinansonmez ccdecb1461 Update prompt: Code Review Assistant 2026-05-28 04:32:05 +00:00
giorgiop 88753096b9 Update prompt: Virtual Doctor 2026-05-28 04:32:05 +00:00
Mr-Potato-Head-Lin 40d8053382 Add prompt: Photovoltaic and Energy Storage System Engineer 2026-05-27 04:34:34 +00:00
samyhm2432@gmail.com b742cdcd4e Add prompt: AI Exam Mastery Tutor 2026-05-27 04:34:33 +00:00
624406266@qq.com b442047a0f Update prompt: Code Review Specialist 2026-05-27 04:34:33 +00:00
fede.gazzelloni@gmail.com a455f0f7ac Update prompt: Article Summarizer 2026-05-27 04:34:33 +00:00
debashis.sarker@gmail.com ed6efec65d Update prompt: The Technical Co-Founder: Building Real Products Together 2026-05-27 04:34:32 +00:00
aymanrabeemac@gmail.com ab90714f40 Update prompt: Code Review Specialist 2026-05-27 04:34:32 +00:00
nolanneff 31d5387f38 Update prompt: Code Review Specialist 2 2026-05-27 04:34:31 +00:00
ersinkoc e3829a93d2 Update prompt: Echoes of the Rust Age 2026-05-27 04:34:31 +00:00
cnwdy888@gmail.com 55fdb6e08a Update prompt: Interview Preparation Coach 2026-05-27 04:34:30 +00:00
guangzhongzhang978@gmail.com 2f13e50be0 Update prompt: Virtual Doctor 2026-05-27 04:34:30 +00:00
f 9fd854be07 Update prompt: Code Review Assistant 2026-05-27 04:34:29 +00:00
devisasari c362b5cb82 Update prompt: Astrologer 2026-05-27 04:34:29 +00:00
iuzn 9ba5c36201 Update prompt: Prompt Generator 2026-05-27 04:34:28 +00:00
randomruffneck89@gmail.com 9858ca3764 Add prompt: Product Infographic 2026-05-26 04:29:45 +00:00
randomruffneck89@gmail.com 0fa4a2e51c Add prompt: CHARACTER SHEET 2026-05-26 04:29:45 +00:00
xiaoyucunx 3931a19121 Update prompt: Code Review Specialist 2026-05-26 04:29:44 +00:00
cperalesg@gmail.com a7dfc80665 Update prompt: Prompt Generator 2026-05-26 04:29:44 +00:00
panda667 eb02da7478 Update prompt: Astrologer 2026-05-26 04:29:43 +00:00
joembolinas 7b7b0adfa7 Update prompt: The Technical Co-Founder: Building Real Products Together 2026-05-26 04:29:43 +00:00
aymanrabeemac@gmail.com 75a5d6bcaa Update prompt: Code Review Specialist 2026-05-26 04:29:42 +00:00
aitank2020@gmail.com 818084c6cd Update prompt: Echoes of the Rust Age 2026-05-26 04:29:42 +00:00
dragoy18@gmail.com 74e14e6e04 Update prompt: Code Review Specialist 2 2026-05-26 04:29:41 +00:00
lior1976@gmail.com 7472f6ad25 Update prompt: Article Summarizer 2026-05-26 04:29:41 +00:00
beresasis@gmail.com 3a29c0f39a Update prompt: Interview Preparation Coach 2026-05-26 04:29:41 +00:00
sinansonmez d7a46df373 Update prompt: Code Review Assistant 2026-05-26 04:29:40 +00:00
giorgiop 69ecc4ce3e Update prompt: Virtual Doctor 2026-05-26 04:29:40 +00:00
seanwt20@gmail.com e8ac8fde9d Add prompt: Creative Writing: Exploring Inner Desires 2026-05-25 04:35:42 +00:00
amvicioushecs fb4528bdb5 Add prompt: Investor Pitch Presentation 2026-05-25 04:35:41 +00:00
minhajbd24@gmail.com 3a5c41fe32 Add prompt: IELTS preparation plan for STEM students 2026-05-25 04:35:41 +00:00
adityalokhande@sspubhilai.com 3683b95865 Add prompt: AI-Powered Dynamic Ad Integration System for Live IPL Broadcasts 2026-05-25 04:35:40 +00:00
624406266@qq.com d516779920 Update prompt: Code Review Specialist 2026-05-25 04:35:40 +00:00
fede.gazzelloni@gmail.com e7dacd23df Update prompt: Article Summarizer 2026-05-25 04:35:39 +00:00
debashis.sarker@gmail.com 56e5092344 Update prompt: The Technical Co-Founder: Building Real Products Together 2026-05-25 04:35:39 +00:00
aymanrabeemac@gmail.com 3367e0bd1f Update prompt: Code Review Specialist 2026-05-25 04:35:39 +00:00
nolanneff 29c3b3aae8 Update prompt: Code Review Specialist 2 2026-05-25 04:35:38 +00:00
ersinkoc f8a60269bf Update prompt: Echoes of the Rust Age 2026-05-25 04:35:38 +00:00
cnwdy888@gmail.com 67a5c17f42 Update prompt: Interview Preparation Coach 2026-05-25 04:35:37 +00:00
guangzhongzhang978@gmail.com f16e3a1898 Update prompt: Virtual Doctor 2026-05-25 04:35:37 +00:00
f 9d8dc3a7d2 Update prompt: Code Review Assistant 2026-05-25 04:35:36 +00:00
devisasari 7a956e49f6 Update prompt: Astrologer 2026-05-25 04:35:36 +00:00
iuzn 3f16c7da3d Update prompt: Prompt Generator 2026-05-25 04:35:35 +00:00
furkangtgg@gmail.com a4b710274f Add prompt: Promot 2026-05-24 04:32:02 +00:00
2805941728 2c790cc7bb Add prompt: Real-Time Geological Disaster Information Query 2026-05-24 04:32:02 +00:00
amvicioushecs 7d44f70233 Add prompt: Master Pitch Deck Creation 2026-05-24 04:32:02 +00:00
xiaoyucunx c956b71cdf Update prompt: Code Review Specialist 2026-05-24 04:32:01 +00:00
cperalesg@gmail.com 600afb244c Update prompt: Prompt Generator 2026-05-24 04:32:01 +00:00
panda667 356d3e0922 Update prompt: Astrologer 2026-05-24 04:32:01 +00:00
joembolinas 8a7c0d342c Update prompt: The Technical Co-Founder: Building Real Products Together 2026-05-24 04:32:00 +00:00
aymanrabeemac@gmail.com dda7891762 Update prompt: Code Review Specialist 2026-05-24 04:32:00 +00:00
aitank2020@gmail.com c5c4d56fda Update prompt: Echoes of the Rust Age 2026-05-24 04:32:00 +00:00
dragoy18@gmail.com a75358c93d Update prompt: Code Review Specialist 2 2026-05-24 04:31:59 +00:00
lior1976@gmail.com 8c7a67a247 Update prompt: Article Summarizer 2026-05-24 04:31:59 +00:00
beresasis@gmail.com a18e6c5aed Update prompt: Interview Preparation Coach 2026-05-24 04:31:59 +00:00
sinansonmez 5a92af9979 Update prompt: Code Review Assistant 2026-05-24 04:31:58 +00:00
giorgiop f93ca6dc0e Update prompt: Virtual Doctor 2026-05-24 04:31:58 +00:00
thanos0000@gmail.com 3f382aae7d Add prompt: Career Profile from Resume Builder 2026-05-23 04:20:40 +00:00
624406266@qq.com 61625cad16 Update prompt: Code Review Specialist 2026-05-23 04:20:39 +00:00
fede.gazzelloni@gmail.com 6be874d28f Update prompt: Article Summarizer 2026-05-23 04:20:39 +00:00
debashis.sarker@gmail.com 633557d84d Update prompt: The Technical Co-Founder: Building Real Products Together 2026-05-23 04:20:38 +00:00
aymanrabeemac@gmail.com 2d6c8fd447 Update prompt: Code Review Specialist 2026-05-23 04:20:38 +00:00
nolanneff d855e47161 Update prompt: Code Review Specialist 2 2026-05-23 04:20:37 +00:00
ersinkoc 6bce8336a3 Update prompt: Echoes of the Rust Age 2026-05-23 04:20:37 +00:00
cnwdy888@gmail.com 9aa3c8b6a2 Update prompt: Interview Preparation Coach 2026-05-23 04:20:37 +00:00
guangzhongzhang978@gmail.com 07179de64e Update prompt: Virtual Doctor 2026-05-23 04:20:36 +00:00
f d6d6b8cefb Update prompt: Code Review Assistant 2026-05-23 04:20:36 +00:00
devisasari bb1da33451 Update prompt: Astrologer 2026-05-23 04:20:35 +00:00
iuzn 15d650a395 Update prompt: Prompt Generator 2026-05-23 04:20:35 +00:00
rsdarab@gmail.com e0d7cc9e03 Add prompt: ticket-to-pr 2026-05-22 04:30:38 +00:00
anirudh.das@gmail.com 1192710ddb Add prompt: Career advisor for economic graduate 2026-05-22 04:30:37 +00:00
dangle5885@gmail.com d3cf066274 Add prompt: Girl 2026-05-22 04:30:37 +00:00
amvicioushecs 4c42106679 Add prompt: Professional Real Estate Appointment Setter 2026-05-22 04:30:36 +00:00
donato.castagna@gmail.com c53c422071 Add prompt: Legal AI Amplifier 2026-05-22 04:30:36 +00:00
dks.enterprises999@gmail.com 43ef5f9d9d Add prompt: bulk images generate for black tshirt oversize short t shirt loose 2026-05-22 04:30:36 +00:00
xiaoyucunx c48fb63eee Update prompt: Code Review Specialist 2026-05-22 04:30:35 +00:00
cperalesg@gmail.com 97b7ebce60 Update prompt: Prompt Generator 2026-05-22 04:30:35 +00:00
panda667 72fbb7beca Update prompt: Astrologer 2026-05-22 04:30:34 +00:00
joembolinas 9d4a3fda67 Update prompt: The Technical Co-Founder: Building Real Products Together 2026-05-22 04:30:34 +00:00
aymanrabeemac@gmail.com d1fccbc74a Update prompt: Code Review Specialist 2026-05-22 04:30:33 +00:00
aitank2020@gmail.com 7508137d44 Update prompt: Echoes of the Rust Age 2026-05-22 04:30:33 +00:00
dragoy18@gmail.com 0c375cf8f2 Update prompt: Code Review Specialist 2 2026-05-22 04:30:32 +00:00
lior1976@gmail.com defa131a8d Update prompt: Article Summarizer 2026-05-22 04:30:32 +00:00
beresasis@gmail.com 5d69abb1e3 Update prompt: Interview Preparation Coach 2026-05-22 04:30:32 +00:00
sinansonmez 50cd7364e0 Update prompt: Code Review Assistant 2026-05-22 04:30:31 +00:00
giorgiop 2230abe8c7 Update prompt: Virtual Doctor 2026-05-22 04:30:31 +00:00
624406266@qq.com ffad56805b Update prompt: Code Review Specialist 2026-05-21 04:34:00 +00:00
fede.gazzelloni@gmail.com 5fdd84603e Update prompt: Article Summarizer 2026-05-21 04:33:59 +00:00
debashis.sarker@gmail.com a0a5370906 Update prompt: The Technical Co-Founder: Building Real Products Together 2026-05-21 04:33:59 +00:00
aymanrabeemac@gmail.com af39d39532 Update prompt: Code Review Specialist 2026-05-21 04:33:58 +00:00
nolanneff 76098b119a Update prompt: Code Review Specialist 2 2026-05-21 04:33:58 +00:00
ersinkoc 4641dd77b2 Update prompt: Echoes of the Rust Age 2026-05-21 04:33:57 +00:00
cnwdy888@gmail.com 45e321027c Update prompt: Interview Preparation Coach 2026-05-21 04:33:57 +00:00
guangzhongzhang978@gmail.com fb2fb0e6d1 Update prompt: Virtual Doctor 2026-05-21 04:33:57 +00:00
f 57244f1f76 Update prompt: Code Review Assistant 2026-05-21 04:33:56 +00:00
devisasari 1591de026b Update prompt: Astrologer 2026-05-21 04:33:56 +00:00
iuzn 4588df4e40 Update prompt: Prompt Generator 2026-05-21 04:33:55 +00:00
semihkislar b8acc00387 Add prompt: Power in the Shadows 2026-05-20 04:30:40 +00:00
f 76411289a7 Update prompt: Realistic Amateur Phone Photo with WhatsApp Chat
Co-authored-by: ekmekcicaner <ekmekcicaner@users.noreply.github.com>
2026-05-20 04:30:39 +00:00
xiaoyucunx e8460c669f Update prompt: Code Review Specialist 2026-05-20 04:30:39 +00:00
cperalesg@gmail.com 3eca569d4e Update prompt: Prompt Generator 2026-05-20 04:30:38 +00:00
panda667 e968c97040 Update prompt: Astrologer 2026-05-20 04:30:38 +00:00
joembolinas db784f1339 Update prompt: The Technical Co-Founder: Building Real Products Together 2026-05-20 04:30:38 +00:00
aymanrabeemac@gmail.com f18fc03559 Update prompt: Code Review Specialist 2026-05-20 04:30:37 +00:00
aitank2020@gmail.com 41d38caa34 Update prompt: Echoes of the Rust Age 2026-05-20 04:30:37 +00:00
dragoy18@gmail.com 8ccd9f5c97 Update prompt: Code Review Specialist 2 2026-05-20 04:30:36 +00:00
lior1976@gmail.com 42cdaed790 Update prompt: Article Summarizer 2026-05-20 04:30:36 +00:00
beresasis@gmail.com 38d1dfe973 Update prompt: Interview Preparation Coach 2026-05-20 04:30:35 +00:00
sinansonmez f205a8dd17 Update prompt: Code Review Assistant 2026-05-20 04:30:35 +00:00
giorgiop c74314ab5d Update prompt: Virtual Doctor 2026-05-20 04:30:34 +00:00
thanos0000@gmail.com ef965981d6 Add prompt: Session Continuity Engine 2026-05-19 04:29:29 +00:00
farias.andreluiz@gmail.com a2a0c0068f Add prompt: Hand-off 2026-05-19 04:29:29 +00:00
amvicioushecs 9f466a5a0c Add prompt: DSPy Business Partner System 2026-05-19 04:29:28 +00:00
ilkerulusoy 97e53c7d58 Add prompt: Test-Driven Bug Hunting With Reproduction Agents 2026-05-19 04:29:28 +00:00
624406266@qq.com f8e40d5957 Update prompt: Code Review Specialist 2026-05-19 04:29:28 +00:00
fede.gazzelloni@gmail.com 1896f262b5 Update prompt: Article Summarizer 2026-05-19 04:29:27 +00:00
debashis.sarker@gmail.com 6326c95dea Update prompt: The Technical Co-Founder: Building Real Products Together 2026-05-19 04:29:27 +00:00
aymanrabeemac@gmail.com 2266c49642 Update prompt: Code Review Specialist 2026-05-19 04:29:26 +00:00
nolanneff 1694698421 Update prompt: Code Review Specialist 2 2026-05-19 04:29:26 +00:00
ersinkoc e0756e03d8 Update prompt: Echoes of the Rust Age 2026-05-19 04:29:25 +00:00
cnwdy888@gmail.com e80e36f792 Update prompt: Interview Preparation Coach 2026-05-19 04:29:25 +00:00
guangzhongzhang978@gmail.com bf012f5bd9 Update prompt: Virtual Doctor 2026-05-19 04:29:24 +00:00
f 0c773b912e Update prompt: Code Review Assistant 2026-05-19 04:29:24 +00:00
devisasari 448550156a Update prompt: Astrologer 2026-05-19 04:29:23 +00:00
iuzn 9d00d1a593 Update prompt: Prompt Generator 2026-05-19 04:29:23 +00:00
loshu2000 2ff3285bc3 Add prompt: Gyroscopic Maze Run 2026-05-18 04:33:33 +00:00
loshu2000 c9db564d3e Add prompt: Quantum Topology Matcher ( 2026-05-18 04:33:33 +00:00
loshu2000 9f20eaa25f Add prompt: Gravity Flux Flappy Engine 2026-05-18 04:33:32 +00:00
loshu2000 705ed6730a Add prompt: Neon Flow Grid Snake 2026-05-18 04:33:32 +00:00
loshu2000 ae42643f98 Add prompt: 3D Kinetic Ball Simulation 2026-05-18 04:33:31 +00:00
gggh40073@gmail.com d4d92a3fa6 Add prompt: Dota 2 Hero Stats and Builds Website Design 2026-05-18 04:33:31 +00:00
xiaoyucunx 0e11595be3 Update prompt: Code Review Specialist 2026-05-18 04:33:31 +00:00
cperalesg@gmail.com ac75c76e5f Update prompt: Prompt Generator 2026-05-18 04:33:30 +00:00
panda667 2985da8f29 Update prompt: Astrologer 2026-05-18 04:33:30 +00:00
joembolinas 1ca13e2afd Update prompt: The Technical Co-Founder: Building Real Products Together 2026-05-18 04:33:29 +00:00
aymanrabeemac@gmail.com 0686deba19 Update prompt: Code Review Specialist 2026-05-18 04:33:29 +00:00
aitank2020@gmail.com b3b3ac4e6f Update prompt: Echoes of the Rust Age 2026-05-18 04:33:28 +00:00
dragoy18@gmail.com 0911e6747b Update prompt: Code Review Specialist 2 2026-05-18 04:33:28 +00:00
lior1976@gmail.com 2fb0870bba Update prompt: Article Summarizer 2026-05-18 04:33:27 +00:00
beresasis@gmail.com e2862340f0 Update prompt: Interview Preparation Coach 2026-05-18 04:33:27 +00:00
sinansonmez 186206ccbb Update prompt: Code Review Assistant 2026-05-18 04:33:26 +00:00
giorgiop 4c09dad757 Update prompt: Virtual Doctor 2026-05-18 04:33:26 +00:00
rajeshagarwalsrms@gmail.com c94400d2b4 Add prompt: rebuttal 2026-05-17 04:28:47 +00:00
Karunyareddy49 61c002fa71 Add prompt: Modern Web Development Assistant 2026-05-17 04:28:46 +00:00
Choud-nb e5879e7d9b Add prompt: 算法比赛教练 2026-05-17 04:28:46 +00:00
624406266@qq.com 517edb47d1 Update prompt: Code Review Specialist 2026-05-17 04:28:46 +00:00
fede.gazzelloni@gmail.com 1a836e2a92 Update prompt: Article Summarizer 2026-05-17 04:28:45 +00:00
debashis.sarker@gmail.com 06994562f7 Update prompt: The Technical Co-Founder: Building Real Products Together 2026-05-17 04:28:45 +00:00
aymanrabeemac@gmail.com 72afbdb860 Update prompt: Code Review Specialist 2026-05-17 04:28:44 +00:00
nolanneff 61aaef587f Update prompt: Code Review Specialist 2 2026-05-17 04:28:44 +00:00
ersinkoc 6c3e24c857 Update prompt: Echoes of the Rust Age 2026-05-17 04:28:43 +00:00
cnwdy888@gmail.com b7d53b503e Update prompt: Interview Preparation Coach 2026-05-17 04:28:43 +00:00
guangzhongzhang978@gmail.com cf3fdbdaf3 Update prompt: Virtual Doctor 2026-05-17 04:28:42 +00:00
f 95b7d580b2 Update prompt: Code Review Assistant 2026-05-17 04:28:42 +00:00
devisasari 0a11f2214e Update prompt: Astrologer 2026-05-17 04:28:41 +00:00
iuzn 33c03ac39d Update prompt: Prompt Generator 2026-05-17 04:28:41 +00:00
amvicioushecs b5bdc97a8c Add prompt: Pro Closer for Small Business Loans 2026-05-16 04:17:12 +00:00
loshu2000 a5cc88a7a5 Add prompt: 《Syllabic Beats: Pulse Runner》 2026-05-16 04:17:11 +00:00
loshu2000 33a4b5ff73 Add prompt: 《Resonance Wave: Synchronic Clusters》 2026-05-16 04:17:11 +00:00
loshu2000 ffe09d4fbe Add prompt: 《Syntactic Stack: Kinetic Grammar》 2026-05-16 04:17:11 +00:00
loshu2000 82c38040c7 Add prompt: 《Semantic Pull: Word Family Grid》 2026-05-16 04:17:10 +00:00
loshu2000 44c7844cb9 Add prompt: 《Vowel Velocity: Phonetic Catch》 2026-05-16 04:17:10 +00:00
smalique44@gmail.com fa6de20825 Add prompt: Structured Text Captioning 2026-05-16 04:17:09 +00:00
thanos0000@gmail.com 98b06f7521 Add prompt: GOT Title 2026-05-16 04:17:09 +00:00
ashimkhan36.ak@gmail.com 056b3c2022 Add prompt: Photo emhanced 2026-05-16 04:17:09 +00:00
xiaoyucunx e151f237e1 Update prompt: Code Review Specialist 2026-05-16 04:17:08 +00:00
cperalesg@gmail.com 75725a7575 Update prompt: Prompt Generator 2026-05-16 04:17:08 +00:00
panda667 8a40d576db Update prompt: Astrologer 2026-05-16 04:17:07 +00:00
joembolinas 6c674a7a95 Update prompt: The Technical Co-Founder: Building Real Products Together 2026-05-16 04:17:07 +00:00
aymanrabeemac@gmail.com e6c6e141b6 Update prompt: Code Review Specialist 2026-05-16 04:17:06 +00:00
aitank2020@gmail.com eb7c27ed9b Update prompt: Echoes of the Rust Age 2026-05-16 04:17:06 +00:00
dragoy18@gmail.com a414b2bc88 Update prompt: Code Review Specialist 2 2026-05-16 04:17:05 +00:00
lior1976@gmail.com 6ebad80865 Update prompt: Article Summarizer 2026-05-16 04:17:05 +00:00
beresasis@gmail.com 9de621ab95 Update prompt: Interview Preparation Coach 2026-05-16 04:17:05 +00:00
sinansonmez 070c889f5e Update prompt: Code Review Assistant 2026-05-16 04:17:04 +00:00
giorgiop d97da6d263 Update prompt: Virtual Doctor 2026-05-16 04:17:04 +00:00
f b5a3e428ac Add prompt: Realistic Amateur Phone Photo with WhatsApp Chat 2026-05-15 04:26:19 +00:00
praveen.jay80@gmail.com ce4f242ab4 Add prompt: Generate Academic Taxonomy 2026-05-15 04:26:19 +00:00
624406266@qq.com 5b0c9dd4eb Update prompt: Code Review Specialist 2026-05-15 04:26:19 +00:00
fede.gazzelloni@gmail.com 67baecf45b Update prompt: Article Summarizer 2026-05-15 04:26:18 +00:00
debashis.sarker@gmail.com beccf2b91e Update prompt: The Technical Co-Founder: Building Real Products Together 2026-05-15 04:26:18 +00:00
aymanrabeemac@gmail.com 5ec27644bf Update prompt: Code Review Specialist 2026-05-15 04:26:17 +00:00
nolanneff b0e728e808 Update prompt: Code Review Specialist 2 2026-05-15 04:26:17 +00:00
ersinkoc b636c990cd Update prompt: Echoes of the Rust Age 2026-05-15 04:26:16 +00:00
cnwdy888@gmail.com d2be6f3e6a Update prompt: Interview Preparation Coach 2026-05-15 04:26:16 +00:00
guangzhongzhang978@gmail.com ea90fd579b Update prompt: Virtual Doctor 2026-05-15 04:26:15 +00:00
f 15a1e223fc Update prompt: Code Review Assistant 2026-05-15 04:26:15 +00:00
devisasari a941389398 Update prompt: Astrologer 2026-05-15 04:26:15 +00:00
iuzn 26f89bb9f0 Update prompt: Prompt Generator 2026-05-15 04:26:14 +00:00
kamarasuba@gmail.com 317c680113 Add prompt: Generate literature search report 2026-05-14 04:23:05 +00:00
vicvasquez76@gmail.com f669a7b722 Add prompt: Crossover arts 2026-05-14 04:23:05 +00:00
saicreation7@gmail.com 0de7622e24 Add prompt: Creative Image Generation for Digital Art 2026-05-14 04:23:04 +00:00
loshu2000 0ee17df20a Add prompt: Design a 3D "Network Topology" where particles travel along predefined paths (splines) to represent data transmission. 2026-05-14 04:23:04 +00:00
loshu2000 776facaa9b Add prompt: Create a high-fidelity "Embers and Ash" environmental effect for a dark-fantasy 3D landing page. 2026-05-14 04:23:04 +00:00
loshu2000 537dd45237 Add prompt: Architect a generative system that builds complex, self-similar fractal structures made entirely of light points (particles). 2026-05-14 04:23:03 +00:00
loshu2000 649836bb68 Add prompt: Digital Sea 2026-05-14 04:23:03 +00:00
loshu2000 8893fb14ef Add prompt: Create a logic where a 3D geometric mesh 2026-05-14 04:23:03 +00:00
archairez85@gmail.com f7ed4b336a Add prompt: Customer Complaint Reply System 2026-05-14 04:23:02 +00:00
xiaoyucunx cf68658a33 Update prompt: Code Review Specialist 2026-05-14 04:23:02 +00:00
cperalesg@gmail.com 80dff4fb2e Update prompt: Prompt Generator 2026-05-14 04:23:02 +00:00
panda667 0383c1c35d Update prompt: Astrologer 2026-05-14 04:23:01 +00:00
joembolinas 8042e0fe6f Update prompt: The Technical Co-Founder: Building Real Products Together 2026-05-14 04:23:01 +00:00
aymanrabeemac@gmail.com 3cccbebf10 Update prompt: Code Review Specialist 2026-05-14 04:23:01 +00:00
aitank2020@gmail.com 82783c441a Update prompt: Echoes of the Rust Age 2026-05-14 04:23:00 +00:00
dragoy18@gmail.com ae3d2f0ddf Update prompt: Code Review Specialist 2 2026-05-14 04:23:00 +00:00
lior1976@gmail.com e64c33b8f0 Update prompt: Article Summarizer 2026-05-14 04:23:00 +00:00
beresasis@gmail.com 246804a20a Update prompt: Interview Preparation Coach 2026-05-14 04:22:59 +00:00
sinansonmez be714955bd Update prompt: Code Review Assistant 2026-05-14 04:22:59 +00:00
giorgiop 518c39e796 Update prompt: Virtual Doctor 2026-05-14 04:22:58 +00:00
zarfsaz.m@gmail.com 71ce010b39 Add prompt: The Lovelyline 2026-05-13 04:23:41 +00:00
ppppatel05@gmail.com b7f8592931 Add prompt: Football Match 2026-05-13 04:23:40 +00:00
umesh.ruffdata@gmail.com 814d74cbe5 Add prompt: Live Stock market analysis 2026-05-13 04:23:40 +00:00
archairez85@gmail.com 8b260b3c72 Add prompt: Smart Project Timeline Builder 2026-05-13 04:23:39 +00:00
624406266@qq.com 5b46aaa158 Update prompt: Code Review Specialist 2026-05-13 04:23:39 +00:00
fede.gazzelloni@gmail.com d8c728f428 Update prompt: Article Summarizer 2026-05-13 04:23:39 +00:00
debashis.sarker@gmail.com e1755111ee Update prompt: The Technical Co-Founder: Building Real Products Together 2026-05-13 04:23:38 +00:00
aymanrabeemac@gmail.com 74e0e3a2ec Update prompt: Code Review Specialist 2026-05-13 04:23:38 +00:00
nolanneff b4133d4055 Update prompt: Code Review Specialist 2 2026-05-13 04:23:37 +00:00
ersinkoc 3c53bfac18 Update prompt: Echoes of the Rust Age 2026-05-13 04:23:37 +00:00
cnwdy888@gmail.com 72c16d1803 Update prompt: Interview Preparation Coach 2026-05-13 04:23:36 +00:00
guangzhongzhang978@gmail.com 1e719a041a Update prompt: Virtual Doctor 2026-05-13 04:23:36 +00:00
f a22e1d2aa5 Update prompt: Code Review Assistant 2026-05-13 04:23:35 +00:00
devisasari 749549e9ec Update prompt: Astrologer 2026-05-13 04:23:35 +00:00
iuzn 9bbbda8d57 Update prompt: Prompt Generator 2026-05-13 04:23:35 +00:00
Arda Kılıçdağı 6da77cb902 chore: make compose.yml support both pre-built images or building locally (#1184) 2026-05-13 00:16:39 +03:00
loshu2000 c068d70062 Add prompt: Abstract 3D Topology Puzzle Architect 2026-05-12 04:20:24 +00:00
loshu2000 3968c8d237 Add prompt: WebGL VFX & Fluid Interaction Specialist 2026-05-12 04:20:23 +00:00
loshu2000 5f46d289c8 Add prompt: Advanced 3D Kinematics & Character Controller 2026-05-12 04:20:23 +00:00
loshu2000 2be4437ed8 Add prompt: Procedural 3D Environment Designer 2026-05-12 04:20:22 +00:00
loshu2000 ee4469289b Add prompt: 3D Physics Sandbox Architect 2026-05-12 04:20:22 +00:00
0x7s0lt1 0774bf69a7 Add prompt: [sigrex.io] Full Kitchen Sink 2026-05-12 04:20:22 +00:00
0x7s0lt1 7a2e9bf4d7 Add prompt: [sigrex.io] Fear & Greed Sentiment Filter 2026-05-12 04:20:21 +00:00
jillellamudi.aditya@gmail.com 3dff47f9d9 Add prompt: interview assistance 2026-05-12 04:20:21 +00:00
0x7s0lt1 764ba2f040 Add prompt: [sigrex.io] RSI + MACD Momentum 2026-05-12 04:20:20 +00:00
ibekwe2006@gmail.com 7a0febaab1 Add prompt: Feature coding template 2026-05-12 04:20:20 +00:00
abhishekojha.edu@gmail.com 59980f2191 Add prompt: Generating Effective Study references for AI/ML Learning Concepts 2026-05-12 04:20:20 +00:00
xiaoyucunx 23c8a0751c Update prompt: Code Review Specialist 2026-05-12 04:20:19 +00:00
cperalesg@gmail.com ddc285c514 Update prompt: Prompt Generator 2026-05-12 04:20:19 +00:00
panda667 acfe5c7aa3 Update prompt: Astrologer 2026-05-12 04:20:18 +00:00
joembolinas 54c5e9965c Update prompt: The Technical Co-Founder: Building Real Products Together 2026-05-12 04:20:18 +00:00
aymanrabeemac@gmail.com 6792b196dd Update prompt: Code Review Specialist 2026-05-12 04:20:17 +00:00
aitank2020@gmail.com fcf1881ae7 Update prompt: Echoes of the Rust Age 2026-05-12 04:20:17 +00:00
dragoy18@gmail.com a9674ce52d Update prompt: Code Review Specialist 2 2026-05-12 04:20:17 +00:00
lior1976@gmail.com 604bdc0393 Update prompt: Article Summarizer 2026-05-12 04:20:16 +00:00
beresasis@gmail.com ab68e54791 Update prompt: Interview Preparation Coach 2026-05-12 04:20:16 +00:00
sinansonmez 872663e83a Update prompt: Code Review Assistant 2026-05-12 04:20:15 +00:00
giorgiop 2a7971092f Update prompt: Virtual Doctor 2026-05-12 04:20:15 +00:00
Fatih Kadir Akın a045cdf117 Fix dark mode favicon (#1183)
Prefer the adaptive SVG favicon so browsers can switch colors in dark mode. Exclude package sources from the app TypeScript project so production builds do not type-check standalone package code.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-05-11 13:48:59 +03:00
ayoubelouardi3710@gmail.com d50dcd8fb6 Add prompt: senior market research analyst specializing in digital advertising and cross-border e-commerce. 2026-05-11 04:30:46 +00:00
nihalbhushantallati@gmail.com 1c46df505c Add prompt: AIM summarized pdf 2026-05-11 04:30:45 +00:00
deeppanjab 80ac5d713d Add prompt: Black Effect on person 2026-05-11 04:30:45 +00:00
cloudexam99@gmail.com 37343dcbeb Add prompt: Job search agent 2026-05-11 04:30:44 +00:00
624406266@qq.com 8329dc8141 Update prompt: Code Review Specialist 2026-05-11 04:30:44 +00:00
fede.gazzelloni@gmail.com 96f293d240 Update prompt: Article Summarizer 2026-05-11 04:30:44 +00:00
debashis.sarker@gmail.com 4a00af18fe Update prompt: The Technical Co-Founder: Building Real Products Together 2026-05-11 04:30:43 +00:00
aymanrabeemac@gmail.com 4e1ffd3ec4 Update prompt: Code Review Specialist 2026-05-11 04:30:43 +00:00
nolanneff 1f4e2975cf Update prompt: Code Review Specialist 2 2026-05-11 04:30:42 +00:00
ersinkoc 7fbd064fd2 Update prompt: Echoes of the Rust Age 2026-05-11 04:30:42 +00:00
cnwdy888@gmail.com 7f2d921136 Update prompt: Interview Preparation Coach 2026-05-11 04:30:41 +00:00
guangzhongzhang978@gmail.com 7799c1f0dc Update prompt: Virtual Doctor 2026-05-11 04:30:41 +00:00
f 2a93382700 Update prompt: Code Review Assistant 2026-05-11 04:30:41 +00:00
devisasari 2f8a00e1a5 Update prompt: Astrologer 2026-05-11 04:30:40 +00:00
iuzn 058d667ac5 Update prompt: Prompt Generator 2026-05-11 04:30:40 +00:00
ppppatel05@gmail.com 4b7c63206a Add prompt: Mothers day 2026-05-10 04:25:14 +00:00
bc238dev@gmail.com e989f78434 Add prompt: The Pleasure of Finding Things Out 2026-05-10 04:25:13 +00:00
md.raut111@gmail.com e51ea247a8 Add prompt: prompt for powerpoint slides generation 2026-05-10 04:25:13 +00:00
xiaoyucunx 38a78fa0b8 Update prompt: Code Review Specialist 2026-05-10 04:25:13 +00:00
cperalesg@gmail.com 88ecdf85f3 Update prompt: Prompt Generator 2026-05-10 04:25:12 +00:00
panda667 114c781083 Update prompt: Astrologer 2026-05-10 04:25:12 +00:00
joembolinas 1755d6dae9 Update prompt: The Technical Co-Founder: Building Real Products Together 2026-05-10 04:25:11 +00:00
aymanrabeemac@gmail.com 76baa05539 Update prompt: Code Review Specialist 2026-05-10 04:25:11 +00:00
aitank2020@gmail.com f4e3559036 Update prompt: Echoes of the Rust Age 2026-05-10 04:25:10 +00:00
dragoy18@gmail.com 637751cf7c Update prompt: Code Review Specialist 2 2026-05-10 04:25:10 +00:00
lior1976@gmail.com c14eb1724f Update prompt: Article Summarizer 2026-05-10 04:25:09 +00:00
beresasis@gmail.com 10e2dbbf04 Update prompt: Interview Preparation Coach 2026-05-10 04:25:09 +00:00
sinansonmez 0c0cdd2110 Update prompt: Code Review Assistant 2026-05-10 04:25:08 +00:00
giorgiop 36ca5ca4cd Update prompt: Virtual Doctor 2026-05-10 04:25:08 +00:00
suyua9 d629c8fc14 docs: clarify interactive book license scope (#1175)
* docs: clarify interactive book license scope

* docs: restore license docs plaintext
2026-05-09 23:20:49 +03:00
farias.andreluiz@gmail.com a129a614e1 Add prompt: Prompt 101 (full) 2026-05-09 04:12:57 +00:00
lokki29400@gmail.com cbab243e32 Add prompt: Anime 2026-05-09 04:12:56 +00:00
Wiiarewe333 812c3d368f Add prompt: Socially Neutral Social Media Commentary Prompt 2026-05-09 04:12:56 +00:00
archairez85@gmail.com f0d8a6b987 Add prompt: YouTube Script Engine — High Retention 2026-05-09 04:12:55 +00:00
janedmentalist@gmail.com 9bb52366ff Add prompt: Reverse-Engineering Vox's Hybrid Video Strategy 2026-05-09 04:12:55 +00:00
624406266@qq.com 172976e65e Update prompt: Code Review Specialist 2026-05-09 04:12:55 +00:00
fede.gazzelloni@gmail.com 2ab3f1d0c7 Update prompt: Article Summarizer 2026-05-09 04:12:54 +00:00
debashis.sarker@gmail.com 6cd1858708 Update prompt: The Technical Co-Founder: Building Real Products Together 2026-05-09 04:12:54 +00:00
aymanrabeemac@gmail.com 9ad9a91d11 Update prompt: Code Review Specialist 2026-05-09 04:12:53 +00:00
nolanneff 4230f1542d Update prompt: Code Review Specialist 2 2026-05-09 04:12:53 +00:00
ersinkoc 69c13e1442 Update prompt: Echoes of the Rust Age 2026-05-09 04:12:52 +00:00
cnwdy888@gmail.com 097830c082 Update prompt: Interview Preparation Coach 2026-05-09 04:12:52 +00:00
guangzhongzhang978@gmail.com 8f59af0c64 Update prompt: Virtual Doctor 2026-05-09 04:12:52 +00:00
f f375374525 Update prompt: Code Review Assistant 2026-05-09 04:12:51 +00:00
devisasari e06e2c2dbe Update prompt: Astrologer 2026-05-09 04:12:51 +00:00
iuzn ebd898902d Update prompt: Prompt Generator 2026-05-09 04:12:50 +00:00
Fatih Kadir Akın 417eb9500d fix(ci): unblock CI lint by allowing any in OIDC/OAuth test files
The OIDC and OAuth test files (added in #1056) inspect the dynamic
NextAuth provider object and use `any` for ergonomic property access.
That trips @typescript-eslint/no-explicit-any (error level), which has
been failing CI on main since 2026-05-02.

Add a file-level eslint-disable for that rule in both test files.
This is the standard pattern for tests that poke runtime-shaped
objects, and keeps the rule strict everywhere else.

Local: npm run lint -> 0 errors, npm test -> 709/709 passing.
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-08 15:04:44 +03:00
Fatih Kadir Akın 7e2fa61037 feat(about): add John Phamous, add Security section with Mehmet Ince
- Add JohnPhamous as a core contributor for performance work (Vercel)
- Introduce a new Security section between Core Contributors and Ideation
- Credit Mehmet Ince (@mdisec) for security fixes
- Add securityTitle translation across all 17 supported locales

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-08 14:33:06 +03:00
Fatih Kadir Akın b1d19ca43a chore: remove entire.io hooks and cached session data
Drop the entire.io CLI integration that was auto-committing full agent
session transcripts (including OAuth client secrets) to a public branch.

- Remove .claude/settings.json (Claude Code PreToolUse/PostToolUse and
  SessionStart/Stop hooks delegating to `entire hooks claude-code`).
- Remove .entire/.gitignore and .entire/settings.json; the local
  .entire/ cache directory and the four .git/hooks/ stubs are deleted
  on disk as well.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-08 14:14:22 +03:00
bharatimadhavi195@gmail.com 25f1a2044f Add prompt: Horror Story in Hindi
Co-authored-by: aishachatgpt@gmail.com <aishachatgpt@gmail.com>
2026-05-08 04:08:16 +00:00
xiaoyucunx ad88aa7b52 Update prompt: Code Review Specialist 2026-05-08 04:08:16 +00:00
cperalesg@gmail.com 61ecb939dc Update prompt: Prompt Generator 2026-05-08 04:08:15 +00:00
panda667 28888e1de0 Update prompt: Astrologer 2026-05-08 04:08:15 +00:00
joembolinas 3310b692dc Update prompt: The Technical Co-Founder: Building Real Products Together 2026-05-08 04:08:14 +00:00
aymanrabeemac@gmail.com 83633bdae3 Update prompt: Code Review Specialist 2026-05-08 04:08:14 +00:00
aitank2020@gmail.com a262d8efe3 Update prompt: Echoes of the Rust Age 2026-05-08 04:08:14 +00:00
dragoy18@gmail.com 5bb91b773d Update prompt: Code Review Specialist 2 2026-05-08 04:08:13 +00:00
lior1976@gmail.com eab26a90a7 Update prompt: Article Summarizer 2026-05-08 04:08:13 +00:00
beresasis@gmail.com 3edac3d2d6 Update prompt: Interview Preparation Coach 2026-05-08 04:08:12 +00:00
sinansonmez 0436afeec4 Update prompt: Code Review Assistant 2026-05-08 04:08:12 +00:00
giorgiop 98626359aa Update prompt: Virtual Doctor 2026-05-08 04:08:11 +00:00
kyakhloufi@gmail.com f50253f09f Add prompt: Email Lead Generator & Tracker 2026-05-07 04:19:28 +00:00
archairez85@gmail.com fd433a07d6 Add prompt: Reply-Focused Cold Email Builder 2026-05-07 04:19:28 +00:00
kyakhloufi@gmail.com 32d2297700 Add prompt: Lead Generator & Tracker for WordPilot.pro 2026-05-07 04:19:27 +00:00
kyakhloufi@gmail.com 45b8457f85 Add prompt: Lead Generator & Tracker (WordPilot.pro) 2026-05-07 04:19:27 +00:00
instagram.default00@gmail.com 53362903c2 Add prompt: Dress 2026-05-07 04:19:27 +00:00
ccchaos12 f7c3ed9610 Add prompt: Literature Reading Assistant 2026-05-07 04:19:26 +00:00
ogaburna8@gmail.com 18328537ef Add prompt: Context-Aware Email Assistant 2026-05-07 04:19:26 +00:00
624406266@qq.com 6c516172bf Update prompt: Code Review Specialist 2026-05-07 04:19:26 +00:00
fede.gazzelloni@gmail.com 38a0f33200 Update prompt: Article Summarizer 2026-05-07 04:19:25 +00:00
debashis.sarker@gmail.com a8cbd40a78 Update prompt: The Technical Co-Founder: Building Real Products Together 2026-05-07 04:19:25 +00:00
aymanrabeemac@gmail.com c0fcaec52b Update prompt: Code Review Specialist 2026-05-07 04:19:25 +00:00
nolanneff 0825623e7a Update prompt: Code Review Specialist 2 2026-05-07 04:19:24 +00:00
ersinkoc f367b9c5d8 Update prompt: Echoes of the Rust Age 2026-05-07 04:19:24 +00:00
cnwdy888@gmail.com ae33724440 Update prompt: Interview Preparation Coach 2026-05-07 04:19:23 +00:00
guangzhongzhang978@gmail.com 034945e8ea Update prompt: Virtual Doctor 2026-05-07 04:19:23 +00:00
f 8f1da46986 Update prompt: Code Review Assistant 2026-05-07 04:19:23 +00:00
devisasari 7a344581af Update prompt: Astrologer 2026-05-07 04:19:22 +00:00
iuzn d110b5ecfc Update prompt: Prompt Generator 2026-05-07 04:19:22 +00:00
matheuspgamba 4acd114e31 Add prompt: Fantasy Dataset Creator for Machine Learning 2026-05-06 04:20:02 +00:00
adediwuratemitope9-tech 6532e30b1b Add prompt: Note 2026-05-06 04:20:02 +00:00
houseflyy 47409585d3 Add prompt: Adaptive Socratic Learning Coach 2026-05-06 04:20:01 +00:00
xiaoyucunx ee0431487f Update prompt: Code Review Specialist 2026-05-06 04:20:01 +00:00
cperalesg@gmail.com 4ff2f56ffe Update prompt: Prompt Generator 2026-05-06 04:20:01 +00:00
panda667 c518ed857e Update prompt: Astrologer 2026-05-06 04:20:00 +00:00
joembolinas fe2983ccba Update prompt: The Technical Co-Founder: Building Real Products Together 2026-05-06 04:20:00 +00:00
aitank2020@gmail.com c2ef089c07 Update prompt: Echoes of the Rust Age 2026-05-06 04:19:59 +00:00
dragoy18@gmail.com 2bb4a81f1c Update prompt: Code Review Specialist 2 2026-05-06 04:19:59 +00:00
lior1976@gmail.com e7eaf3a4b2 Update prompt: Article Summarizer 2026-05-06 04:19:58 +00:00
beresasis@gmail.com 496d254fcf Update prompt: Interview Preparation Coach 2026-05-06 04:19:58 +00:00
sinansonmez aa70c13985 Update prompt: Code Review Assistant 2026-05-06 04:19:57 +00:00
giorgiop 675a760e44 Update prompt: Virtual Doctor 2026-05-06 04:19:57 +00:00
mdevender9966@gmail.com c095c39b1c Add prompt: My Kalashala 2026-05-05 04:07:19 +00:00
abhishekparab301@gmail.com 6c0f9d6d8d Add prompt: Finding the company 2026-05-05 04:07:19 +00:00
st897339@gmail.com ae3397f9a9 Add prompt: adding these development in a gasifier design tool 2026-05-05 04:07:18 +00:00
m.azeem@aljameel.com.qa 502a38f770 Add prompt: Wonder Land Adventure 2026-05-05 04:07:18 +00:00
rohitthakkar22933@gmail.com 3375bac60c Add prompt: Horoscope l 2026-05-05 04:07:17 +00:00
semihkislar 3c495a12ee Add prompt: Photorealistic 4K Reference Image Enhancement 2026-05-05 04:07:17 +00:00
fede.gazzelloni@gmail.com 9ec0cb2be6 Update prompt: Article Summarizer 2026-05-05 04:07:16 +00:00
debashis.sarker@gmail.com f537e2e27a Update prompt: The Technical Co-Founder: Building Real Products Together 2026-05-05 04:07:16 +00:00
aymanrabeemac@gmail.com 4df711c7d1 Update prompt: Code Review Specialist 2026-05-05 04:07:16 +00:00
nolanneff 009b982060 Update prompt: Code Review Specialist 2 2026-05-05 04:07:15 +00:00
ersinkoc 45e818f691 Update prompt: Echoes of the Rust Age 2026-05-05 04:07:15 +00:00
cnwdy888@gmail.com 1ef8f6dcbb Update prompt: Interview Preparation Coach 2026-05-05 04:07:14 +00:00
guangzhongzhang978@gmail.com e7585e09ec Update prompt: Virtual Doctor 2026-05-05 04:07:14 +00:00
f 01b019dc80 Update prompt: Code Review Assistant 2026-05-05 04:07:13 +00:00
devisasari 3fcde2c55e Update prompt: Astrologer 2026-05-05 04:07:13 +00:00
iuzn a4f52b2064 Update prompt: Prompt Generator 2026-05-05 04:07:12 +00:00
yigitgurler 129f9957e5 Add prompt: Opus-Driven Deep Thinking System 2026-05-04 04:22:48 +00:00
m.azeem@aljameel.com.qa 3428ff6f3d Add prompt: Create High-Demand AI Images for Stock 2026-05-04 04:22:48 +00:00
yahyahamad79@gmail.com 25a8c5476b Add prompt: Academic PowerPoint Presentation Designer 2026-05-04 04:22:48 +00:00
Bornduck e76920fa6b Add prompt: Split Word Rejoin 2026-05-04 04:22:47 +00:00
xiaoyucunx 4ed56ed38d Update prompt: Code Review Specialist 2026-05-04 04:22:47 +00:00
cperalesg@gmail.com 81f972aefb Update prompt: Prompt Generator 2026-05-04 04:22:46 +00:00
panda667 db25fa357b Update prompt: Astrologer 2026-05-04 04:22:46 +00:00
joembolinas 6034ce8e0c Update prompt: The Technical Co-Founder: Building Real Products Together 2026-05-04 04:22:45 +00:00
aitank2020@gmail.com 73aed95d87 Update prompt: Echoes of the Rust Age 2026-05-04 04:22:45 +00:00
dragoy18@gmail.com 2ac13ef9db Update prompt: Code Review Specialist 2 2026-05-04 04:22:45 +00:00
lior1976@gmail.com e6ba070e55 Update prompt: Article Summarizer 2026-05-04 04:22:44 +00:00
beresasis@gmail.com 5eea3c10f7 Update prompt: Interview Preparation Coach 2026-05-04 04:22:44 +00:00
sinansonmez d346e72c98 Update prompt: Code Review Assistant 2026-05-04 04:22:43 +00:00
giorgiop a4824d6973 Update prompt: Virtual Doctor 2026-05-04 04:22:43 +00:00
karthigeyanbaskaran 205a2448f3 Add prompt: English Grammar and Style Corrector 2026-05-03 04:22:45 +00:00
oasiszeng 712c9a78ff Add prompt: Git Repository Analysis and Knowledge Base Construction 2026-05-03 04:22:45 +00:00
fede.gazzelloni@gmail.com 56d92ccd67 Update prompt: Article Summarizer 2026-05-03 04:22:44 +00:00
debashis.sarker@gmail.com b039b38e61 Update prompt: The Technical Co-Founder: Building Real Products Together 2026-05-03 04:22:44 +00:00
aymanrabeemac@gmail.com 8ea300b777 Update prompt: Code Review Specialist 2026-05-03 04:22:43 +00:00
nolanneff 3a5b2d03ac Update prompt: Code Review Specialist 2 2026-05-03 04:22:43 +00:00
ersinkoc 485c6c9d90 Update prompt: Echoes of the Rust Age 2026-05-03 04:22:43 +00:00
cnwdy888@gmail.com 1d20bf3e79 Update prompt: Interview Preparation Coach 2026-05-03 04:22:42 +00:00
guangzhongzhang978@gmail.com 53af53a01c Update prompt: Virtual Doctor 2026-05-03 04:22:42 +00:00
f 2adb88e9a1 Update prompt: Code Review Assistant 2026-05-03 04:22:41 +00:00
devisasari 869cfdffcd Update prompt: Astrologer 2026-05-03 04:22:41 +00:00
iuzn 27a768e10d Update prompt: Prompt Generator 2026-05-03 04:22:40 +00:00
Amayaranjan Das 918fa71a1c feat(auth): honour AUTH_OIDC/OAUTH_NAME and _LOGO env vars in login button (#1177) 2026-05-02 23:18:45 +03:00
Amayaranjan Das bf1de55c8d feat(auth): add generic OIDC and OAuth 2.0 plugins (#1056) 2026-05-02 09:24:07 +03:00
bishopdavies98@gmail.com fdf407a3e4 Add prompt: Grok customization 2026-05-02 04:09:46 +00:00
senoldak e5b4b7296c Add prompt: 🚀 STRATEGIC MODE 2026-05-02 04:09:46 +00:00
goodyer123@gmail.com 268bd594eb Add prompt: Learn Rust Programming 2026-05-02 04:09:45 +00:00
sanjoxavier888@gmail.com 0ad8f01404 Add prompt: 3D Cartoon Animation: Baby Bunny Adventure 2026-05-02 04:09:45 +00:00
xiaoyucunx 378d5dc764 Update prompt: Code Review Specialist 2026-05-02 04:09:45 +00:00
cperalesg@gmail.com 20a0ec1f0e Update prompt: Prompt Generator 2026-05-02 04:09:44 +00:00
panda667 ad9b42df41 Update prompt: Astrologer 2026-05-02 04:09:44 +00:00
joembolinas 0130c4e456 Update prompt: The Technical Co-Founder: Building Real Products Together 2026-05-02 04:09:43 +00:00
aitank2020@gmail.com 05e7f12db1 Update prompt: Echoes of the Rust Age 2026-05-02 04:09:43 +00:00
dragoy18@gmail.com 3e9a209552 Update prompt: Code Review Specialist 2 2026-05-02 04:09:43 +00:00
lior1976@gmail.com 8d338ca2c6 Update prompt: Article Summarizer 2026-05-02 04:09:42 +00:00
beresasis@gmail.com 37124ba29a Update prompt: Interview Preparation Coach 2026-05-02 04:09:42 +00:00
sinansonmez 4f4ca63454 Update prompt: Code Review Assistant 2026-05-02 04:09:41 +00:00
giorgiop f0406d8181 Update prompt: Virtual Doctor 2026-05-02 04:09:41 +00:00
fede.gazzelloni@gmail.com 0f981717dd Update prompt: Article Summarizer 2026-05-01 04:27:44 +00:00
debashis.sarker@gmail.com 9ecf416fb0 Update prompt: The Technical Co-Founder: Building Real Products Together 2026-05-01 04:27:43 +00:00
aymanrabeemac@gmail.com 3c132527f9 Update prompt: Code Review Specialist 2026-05-01 04:27:43 +00:00
nolanneff 54e5da26d1 Update prompt: Code Review Specialist 2 2026-05-01 04:27:43 +00:00
ersinkoc 0bdbced718 Update prompt: Echoes of the Rust Age 2026-05-01 04:27:42 +00:00
cnwdy888@gmail.com 1571490408 Update prompt: Interview Preparation Coach 2026-05-01 04:27:42 +00:00
guangzhongzhang978@gmail.com 366798154b Update prompt: Virtual Doctor 2026-05-01 04:27:41 +00:00
f 7fd9087c56 Update prompt: Code Review Assistant 2026-05-01 04:27:41 +00:00
devisasari b0f98485ca Update prompt: Astrologer 2026-05-01 04:27:40 +00:00
iuzn 61d836b01d Update prompt: Prompt Generator 2026-05-01 04:27:40 +00:00
kc-optimal-computing b3620c23fb Add prompt: App Feature - Focused Readiness Audit 2026-04-30 04:19:11 +00:00
kc-optimal-computing 29a32041a8 Add prompt: Borrow Skill 2026-04-30 04:19:10 +00:00
kc-optimal-computing 84f609dda4 Add prompt: Grok Research Agent
Co-authored-by: Nick040791 <Nick040791@users.noreply.github.com>
2026-04-30 04:19:10 +00:00
ajillell_uhg 0826f1a858 Add prompt: Data Lineage Agent Skill 2026-04-30 04:19:09 +00:00
xiaoyucunx 210e578157 Update prompt: Code Review Specialist 2026-04-30 04:19:09 +00:00
cperalesg@gmail.com dd5055ea20 Update prompt: Prompt Generator 2026-04-30 04:19:08 +00:00
panda667 c87a429b2a Update prompt: Astrologer 2026-04-30 04:19:08 +00:00
joembolinas 1a8659cdaa Update prompt: The Technical Co-Founder: Building Real Products Together 2026-04-30 04:19:08 +00:00
aitank2020@gmail.com 3faffa65ff Update prompt: Echoes of the Rust Age 2026-04-30 04:19:07 +00:00
dragoy18@gmail.com ae5b86a3af Update prompt: Code Review Specialist 2 2026-04-30 04:19:07 +00:00
lior1976@gmail.com 4a0cd0a61c Update prompt: Article Summarizer 2026-04-30 04:19:06 +00:00
beresasis@gmail.com 8c26e456c6 Update prompt: Interview Preparation Coach 2026-04-30 04:19:06 +00:00
sinansonmez 647a91cea3 Update prompt: Code Review Assistant 2026-04-30 04:19:05 +00:00
giorgiop 6dd7302e7f Update prompt: Virtual Doctor 2026-04-30 04:19:05 +00:00
loshu2000 3af7049234 Add prompt: Grid-Based Match-3 Chain Reaction Logic 2026-04-29 04:17:16 +00:00
loshu2000 619c76c96d Add prompt: Vector-Based Space Combat System 2026-04-29 04:17:16 +00:00
loshu2000 b09b4dc0ae Add prompt: Act as a Procedural Content Generator 2026-04-29 04:17:16 +00:00
loshu2000 e1811ae163 Add prompt: Act as a Game Physics Architect 2026-04-29 04:17:15 +00:00
senoldak 784bb22672 Add prompt: 🛡️ RED TEAM MODE 2026-04-29 04:17:15 +00:00
senoldak ba370693eb Add prompt: ⚙️ CONSTRAINT SOLVER MODE 2026-04-29 04:17:14 +00:00
senoldak 7117c90cda Add prompt: 🧠 FORMAL VERIFICATION MODE 2026-04-29 04:17:14 +00:00
thomas.adamson.16@gmail.com 53848b31bf Add prompt: Claude Deep Prompt 2026-04-29 04:17:14 +00:00
mertssmnoglu 206c4c8b84 Add prompt: Alternative Text Generator 2026-04-29 04:17:13 +00:00
shamanthreddy57@gmail.com 33dd5ac6c8 Add prompt: Comprehensive VC Fundraising Analysis 2026-04-29 04:17:13 +00:00
shamanthreddy57@gmail.com 8ff3d62b5e Add prompt: Competitor Awareness 2026-04-29 04:17:12 +00:00
fede.gazzelloni@gmail.com 2ff7d190a7 Update prompt: Article Summarizer 2026-04-29 04:17:12 +00:00
debashis.sarker@gmail.com 2227078c9a Update prompt: The Technical Co-Founder: Building Real Products Together 2026-04-29 04:17:11 +00:00
aymanrabeemac@gmail.com ccf44242c3 Update prompt: Code Review Specialist 2026-04-29 04:17:11 +00:00
nolanneff 6933a8e0fc Update prompt: Code Review Specialist 2 2026-04-29 04:17:11 +00:00
ersinkoc 5009ba6862 Update prompt: Echoes of the Rust Age 2026-04-29 04:17:10 +00:00
cnwdy888@gmail.com 0daf1b6aab Update prompt: Interview Preparation Coach 2026-04-29 04:17:10 +00:00
guangzhongzhang978@gmail.com 1dcf5fba85 Update prompt: Virtual Doctor 2026-04-29 04:17:09 +00:00
f 2608425343 Update prompt: Code Review Assistant 2026-04-29 04:17:09 +00:00
devisasari e5e7cc2c5b Update prompt: Astrologer 2026-04-29 04:17:08 +00:00
iuzn f5f084f663 Update prompt: Prompt Generator 2026-04-29 04:17:08 +00:00
ah0sman 2107e0942c Add prompt: Oracle Payroll Unsupported Localization Guide 2026-04-28 04:19:59 +00:00
dmytrokovych@gmail.com ff25e6ec87 Add prompt: Street-art punk poster 2026-04-28 04:19:58 +00:00
semihkislar da13c7e71e Add prompt: Lost in [Country] with ChatGPT Image 2 2026-04-28 04:19:58 +00:00
dishantpatel624@gmail.com 88f5bcd81f Add prompt: details of the given bug 2026-04-28 04:19:58 +00:00
dishantpatel624@gmail.com 7b62aa5ff4 Add prompt: handle bug in feature 2026-04-28 04:19:57 +00:00
xiaoyucunx f05abf53f3 Update prompt: Code Review Specialist 2026-04-28 04:19:57 +00:00
cperalesg@gmail.com 9741c79b03 Update prompt: Prompt Generator 2026-04-28 04:19:56 +00:00
panda667 5f5d6c230b Update prompt: Astrologer 2026-04-28 04:19:56 +00:00
joembolinas f1d0f7cff2 Update prompt: The Technical Co-Founder: Building Real Products Together 2026-04-28 04:19:55 +00:00
aitank2020@gmail.com e9c959371b Update prompt: Echoes of the Rust Age 2026-04-28 04:19:55 +00:00
dragoy18@gmail.com 1533a04680 Update prompt: Code Review Specialist 2 2026-04-28 04:19:55 +00:00
lior1976@gmail.com b61234cea9 Update prompt: Article Summarizer 2026-04-28 04:19:54 +00:00
beresasis@gmail.com 3e41df5c9e Update prompt: Interview Preparation Coach 2026-04-28 04:19:54 +00:00
sinansonmez 2d7ebe83a0 Update prompt: Code Review Assistant 2026-04-28 04:19:53 +00:00
giorgiop f00537afae Update prompt: Virtual Doctor 2026-04-28 04:19:53 +00:00
senoldak 4870438dcd Add prompt: 🕶️ INCOGNITO / PRIVATE BROWSING MODE 2026-04-27 04:17:50 +00:00
senoldak 13c79a9814 Add prompt: 🔒 ULTRA-STRICT MODE 2026-04-27 04:17:49 +00:00
senoldak 843a7bfa98 Add prompt: 🧪 Sandbox Mode 2026-04-27 04:17:49 +00:00
343300327@qq.com a106b45e0d Add prompt: 电影视觉指导与AIGC分镜生成器 2026-04-27 04:17:48 +00:00
prksinbox@gmail.com 333b2652f5 Add prompt: The Paradoxical Soundscape: Ancient Acoustic Mysteries Video Exploration 2026-04-27 04:17:48 +00:00
fede.gazzelloni@gmail.com 8a0e87fc46 Update prompt: Article Summarizer 2026-04-27 04:17:48 +00:00
debashis.sarker@gmail.com b1083f2bf5 Update prompt: The Technical Co-Founder: Building Real Products Together 2026-04-27 04:17:47 +00:00
aymanrabeemac@gmail.com d8a84a02eb Update prompt: Code Review Specialist 2026-04-27 04:17:47 +00:00
nolanneff a403e7afcc Update prompt: Code Review Specialist 2 2026-04-27 04:17:46 +00:00
ersinkoc 59e68349dc Update prompt: Echoes of the Rust Age 2026-04-27 04:17:46 +00:00
cnwdy888@gmail.com 43bb3a1b35 Update prompt: Interview Preparation Coach 2026-04-27 04:17:46 +00:00
guangzhongzhang978@gmail.com 4977ed62c9 Update prompt: Virtual Doctor 2026-04-27 04:17:45 +00:00
f 6adaf05680 Update prompt: Code Review Assistant 2026-04-27 04:17:45 +00:00
devisasari a70d99a3a9 Update prompt: Astrologer 2026-04-27 04:17:44 +00:00
iuzn db41db65fa Update prompt: Prompt Generator 2026-04-27 04:17:44 +00:00
suyua9 3e40878a88 fix: avoid GitHub links for email contributors (#1167)
* fix: avoid GitHub links for email contributors

* test: address contributor formatter review

* test: leave generated prompts untouched
2026-04-27 01:16:34 +03:00
amvicioushecs e74d129e83 Add prompt: 6-Panel Storyboard Mastery 2026-04-26 04:13:18 +00:00
mtberkcelik@gmail.com 4708674033 Add prompt: Photorealistic Webcam Bedroom Scene Prompt 2026-04-26 04:13:18 +00:00
mtberkcelik@gmail.com 54af72adf1 Add prompt: Rooftop Lifestyle Portrait Prompt 2026-04-26 04:13:18 +00:00
mtberkcelik@gmail.com 6fee4c32ba Add prompt: Café Portrait Prompt Description 2026-04-26 04:13:17 +00:00
dishantpatel624@gmail.com f99fc3eb56 Add prompt: create app screenshots 2026-04-26 04:13:17 +00:00
adediwuratemitope9-tech cccd2b2480 Add prompt: Video 2026-04-26 04:13:16 +00:00
rajeshrock544117@gmail.com 83bdbd658b Add prompt: operating system exam preparation 2026-04-26 04:13:16 +00:00
esat54 28f4c2235d Add prompt: Oxford 3000: Step-by-Step Vocabulary Coach 2026-04-26 04:13:16 +00:00
amvicioushecs b3ae69df9d Update prompt: Vibe Coding with Commands and Skills 2026-04-26 04:13:15 +00:00
xiaoyucunx e72312a403 Update prompt: Code Review Specialist 2026-04-26 04:13:15 +00:00
cperalesg@gmail.com b2d51aa6ab Update prompt: Prompt Generator 2026-04-26 04:13:14 +00:00
panda667 d0098ae093 Update prompt: Astrologer 2026-04-26 04:13:14 +00:00
joembolinas b378f2ff77 Update prompt: The Technical Co-Founder: Building Real Products Together 2026-04-26 04:13:14 +00:00
aitank2020@gmail.com 5ce0e14ea6 Update prompt: Echoes of the Rust Age 2026-04-26 04:13:13 +00:00
dragoy18@gmail.com 8698ab9431 Update prompt: Code Review Specialist 2 2026-04-26 04:13:13 +00:00
lior1976@gmail.com 900d046c24 Update prompt: Article Summarizer 2026-04-26 04:13:12 +00:00
beresasis@gmail.com 66f882eac8 Update prompt: Interview Preparation Coach 2026-04-26 04:13:12 +00:00
sinansonmez 9a8333e537 Update prompt: Code Review Assistant 2026-04-26 04:13:11 +00:00
giorgiop 237eaf85cb Update prompt: Virtual Doctor 2026-04-26 04:13:11 +00:00
Fatih Kadir Akın 887b3f3f3a feat(home): replace industries grid with Open Source Friday video (#1170)
* feat(home): replace industries grid with Open Source Friday video

Replaces the rotating industries section under the hero search bar with
an embed of the GitHub Open Source Friday episode (starting at 6:12).
Also widens the hero's right column and tightens the left text column
so the video sits comfortably without overflowing on standard laptop
viewports.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* chore(i18n): remove unused heroIndustries keys

The industries grid was replaced by a YouTube embed; only
'searchPlaceholder' is still referenced. Drop the prefix,
clickToExplore, and 36 industry labels across all 17 locales.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* fix(home): i18n iframe title, lazy load, nocookie, width parity

Addresses PR review feedback on the YouTube embed:
- Translate iframe title via next-intl (new heroIndustries.videoTitle key)
- Add loading="lazy" to defer ~1MB of player JS
- Switch embed to youtube-nocookie.com for better cookie/privacy hygiene
- Restore max-w-lg so the video matches the search bar width

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* chore: stop tracking local .env.docker

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-04-25 16:44:47 +03:00
suyua9 fee294e35b fix(docker): use prebuilt image by default in compose (#1169) 2026-04-25 09:08:25 +03:00
amvicioushecs 9df9d81b64 Add prompt: Vibe Coding with Commands and Skills 2026-04-25 04:01:24 +00:00
amvicioushecs c37daf3b8d Add prompt: Sniper-Precision Debugging Skill 2026-04-25 04:01:24 +00:00
amvicioushecs ae63ebe2e8 Add prompt: Hypnotherapist Guidance for Stress Management 2026-04-25 04:01:23 +00:00
thanos0000@gmail.com 38f1bc1546 Add prompt: Car Buying Intake Interview 2026-04-25 04:01:23 +00:00
alex.dadaev@gmail.com b9e4a8783a Add prompt: User Acquisition Data Analysis 2026-04-25 04:01:23 +00:00
dishantpatel624@gmail.com 6045ea3988 Add prompt: low risk to uplift income 2026-04-25 04:01:22 +00:00
dishantpatel624@gmail.com 373557030d Add prompt: Handle the bug in feature 2026-04-25 04:01:22 +00:00
fede.gazzelloni@gmail.com 1434338774 Update prompt: Article Summarizer 2026-04-25 04:01:21 +00:00
debashis.sarker@gmail.com ddf42cb705 Update prompt: The Technical Co-Founder: Building Real Products Together 2026-04-25 04:01:21 +00:00
aymanrabeemac@gmail.com 0757c70445 Update prompt: Code Review Specialist 2026-04-25 04:01:21 +00:00
nolanneff 59e0729ec1 Update prompt: Code Review Specialist 2 2026-04-25 04:01:20 +00:00
ersinkoc 564c906ebb Update prompt: Echoes of the Rust Age 2026-04-25 04:01:20 +00:00
cnwdy888@gmail.com 757b593355 Update prompt: Interview Preparation Coach 2026-04-25 04:01:19 +00:00
guangzhongzhang978@gmail.com 6ee24c0de2 Update prompt: Virtual Doctor 2026-04-25 04:01:19 +00:00
f 7e22e06fc8 Update prompt: Code Review Assistant 2026-04-25 04:01:18 +00:00
devisasari 6629ee671f Update prompt: Astrologer 2026-04-25 04:01:18 +00:00
iuzn ed3bcc3669 Update prompt: Prompt Generator 2026-04-25 04:01:18 +00:00
loshu2000 c93bf66fcb Add prompt: High-Velocity Dogfight 2026-04-24 04:08:54 +00:00
loshu2000 5af4ea1a2f Add prompt: Logic-Flow Educational Puzzle 2026-04-24 04:08:54 +00:00
loshu2000 1bcf7c12ed Add prompt: Star-Marshal: Raycast Tactical Shooter 2026-04-24 04:08:54 +00:00
loshu2000 43c8aec9bc Add prompt: Gravity Shift: Low-Poly Physics Platformer 2026-04-24 04:08:53 +00:00
loshu2000 54aac0b785 Add prompt: Cyber-Pulse: 3D Neon Particle Swarm 2026-04-24 04:08:53 +00:00
donato.castagna@gmail.com 705231857c Add prompt: Code Review Professional 2026-04-24 04:08:52 +00:00
1079065558 044837b871 Add prompt: Modify Front-End Webpage with Codex and Image Input 2026-04-24 04:08:52 +00:00
yigitgurler 0e0a88e516 Add prompt: RPA/Agentic AI Process Developer Portfolio Design for Claude 2026-04-24 04:08:52 +00:00
1079065558 5246860a12 Add prompt: High-End Technology-Inspired Website UI Redesign 2026-04-24 04:08:51 +00:00
1079065558 5cc55ed0c0 Add prompt: Redesign Front-End with Codex 2026-04-24 04:08:51 +00:00
ZhenjieZhao66 52fb8a8d8f Add prompt: Designing a Feature Testing Page for Enterprise WeChat/DingTalk 2026-04-24 04:08:50 +00:00
chinnarinestam@gmail.com 359e970083 Add prompt: story 2026-04-24 04:08:50 +00:00
xiaoyucunx 82fa5fffda Update prompt: Code Review Specialist 2026-04-24 04:08:50 +00:00
cperalesg@gmail.com 658c850a60 Update prompt: Prompt Generator 2026-04-24 04:08:49 +00:00
panda667 543447b31b Update prompt: Astrologer 2026-04-24 04:08:49 +00:00
joembolinas 2a2211d0c7 Update prompt: The Technical Co-Founder: Building Real Products Together 2026-04-24 04:08:48 +00:00
aitank2020@gmail.com 4ea20a0f43 Update prompt: Echoes of the Rust Age 2026-04-24 04:08:48 +00:00
dragoy18@gmail.com 133cf4f979 Update prompt: Code Review Specialist 2 2026-04-24 04:08:47 +00:00
lior1976@gmail.com a7920e0b27 Update prompt: Article Summarizer 2026-04-24 04:08:47 +00:00
beresasis@gmail.com 80bf70a9d4 Update prompt: Interview Preparation Coach 2026-04-24 04:08:47 +00:00
sinansonmez 53c3ac1777 Update prompt: Code Review Assistant 2026-04-24 04:08:46 +00:00
giorgiop 6eb47ebd6e Update prompt: Virtual Doctor 2026-04-24 04:08:46 +00:00
Fatih Kadir Akın dc161feb81 Fix 404 on user profiles with uppercase usernames (#1166)
* Add announcement banner with MS Build 2026 talk

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Fix 404 on user profile when username has uppercase letters

Use case-insensitive match instead of forcing username to lowercase, since
usernames are stored with their original casing (e.g., SatishB15).

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-04-23 22:22:54 +03:00
Fatih Kadir Akın 82783a7cc6 Add announcement banner with MS Build 2026 talk (#1165)
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-04-23 21:46:51 +03:00
Fatih Kadir Akın 628b90a284 Merge pull request #1164 from SatishB15/fix/bio-link-parsing
fix(bio): handle trailing comma in URLs
2026-04-23 21:43:39 +03:00
Satish Birhade 7a07039ad7 fix(bio): use cleaned URL for href while preserving original text rendering 2026-04-23 17:20:58 +05:30
Satish Birhade 35b0d90fd2 fix(bio): handle trailing comma in URLs 2026-04-23 16:43:21 +05:30
oluwasegunolorungbeja@gmail.com f9cf8c533c Add prompt: What friendship should be all about 2026-04-23 04:06:22 +00:00
oluwasegunolorungbeja@gmail.com 5502d5a2e1 Add prompt: Building a community 2026-04-23 04:06:21 +00:00
narrivodigital f6b39f795a Add prompt: Realistic İmage JSON Prompt 2026-04-23 04:06:21 +00:00
naveen@upfinzo.in 52302c1453 Add prompt: suitable sunglasses using gemini 2026-04-23 04:06:21 +00:00
fede.gazzelloni@gmail.com c40d37ec52 Update prompt: Article Summarizer 2026-04-23 04:06:20 +00:00
debashis.sarker@gmail.com de9b06d9f3 Update prompt: The Technical Co-Founder: Building Real Products Together 2026-04-23 04:06:20 +00:00
aymanrabeemac@gmail.com 6afd93b403 Update prompt: Code Review Specialist 2026-04-23 04:06:19 +00:00
nolanneff 92c24d031a Update prompt: Code Review Specialist 2 2026-04-23 04:06:19 +00:00
ersinkoc 4a00f8a5c3 Update prompt: Echoes of the Rust Age 2026-04-23 04:06:19 +00:00
cnwdy888@gmail.com daba7d782c Update prompt: Interview Preparation Coach 2026-04-23 04:06:18 +00:00
guangzhongzhang978@gmail.com 69dd7918da Update prompt: Virtual Doctor 2026-04-23 04:06:18 +00:00
f 0349f7d60f Update prompt: Code Review Assistant 2026-04-23 04:06:17 +00:00
devisasari b808c5d340 Update prompt: Astrologer 2026-04-23 04:06:17 +00:00
iuzn 0b24961e14 Update prompt: Prompt Generator 2026-04-23 04:06:17 +00:00
Fatih Kadir Akın 9f33f30f6a Merge pull request #1162 from f/f/remove-ezoic
Remove Ezoic ad integration
2026-04-23 00:24:07 +03:00
Fatih Kadir Akın dbd2eed8bc Remove Ezoic ad integration
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-04-23 00:22:56 +03:00
cperalesg@gmail.com a4632f1a55 Add prompt: Key Concepts and Essential Definitions for Exam 2026-04-22 04:05:09 +00:00
amvicioushecs adf0d3fda8 Add prompt: Chain of Thought for Podcast Guest Analysis 2026-04-22 04:05:08 +00:00
amvicioushecs 22987f8e75 Add prompt: Augmented Reality Real Estate Staging 2026-04-22 04:05:08 +00:00
kemedt25@gmail.com 4290885b2e Add prompt: Good for us 2026-04-22 04:05:07 +00:00
ngattu7044@gmail.com 8c523c4f45 Add prompt: Rocket launcher 2026-04-22 04:05:07 +00:00
tullapeople@gmail.com f6b861e5e7 Add prompt: Create a CAN Simulation in Python 2026-04-22 04:05:07 +00:00
amvicioushecs 5a747a2c5b Add prompt: Grant Finder 2026-04-22 04:05:06 +00:00
senoldak 908e06a043 Add prompt: ⚙️ PromptForge 2026-04-22 04:05:06 +00:00
maikelwally78@gmail.com 75060011db Add prompt: School Report Management System for SMP Negeri 7 Sentani 2026-04-22 04:05:05 +00:00
xiaoyucunx 4c66355607 Update prompt: Code Review Specialist 2026-04-22 04:05:05 +00:00
cperalesg@gmail.com 898a55c4d8 Update prompt: Prompt Generator 2026-04-22 04:05:04 +00:00
panda667 2ca2eac30a Update prompt: Astrologer 2026-04-22 04:05:04 +00:00
joembolinas eff4dedc47 Update prompt: The Technical Co-Founder: Building Real Products Together 2026-04-22 04:05:04 +00:00
aitank2020@gmail.com bc28d61c9b Update prompt: Echoes of the Rust Age 2026-04-22 04:05:03 +00:00
dragoy18@gmail.com f9119a6fc6 Update prompt: Code Review Specialist 2 2026-04-22 04:05:03 +00:00
lior1976@gmail.com 077dc119b0 Update prompt: Article Summarizer 2026-04-22 04:05:02 +00:00
beresasis@gmail.com 1cfbf7c301 Update prompt: Interview Preparation Coach 2026-04-22 04:05:02 +00:00
sinansonmez fe508cdc0d Update prompt: Code Review Assistant 2026-04-22 04:05:01 +00:00
giorgiop 294da3e1bc Update prompt: Virtual Doctor 2026-04-22 04:05:01 +00:00
Fatih Kadir Akın bf0c10fc79 Update README with source link for the guide
Added source link to the interactive guide.
2026-04-21 11:17:17 +03:00
samsungeindia@gmail.com f1f2df98e2 Add prompt: Ee 2026-04-21 04:06:04 +00:00
senoldak 4a34d2855a Add prompt: 🛡 Financial Compliance Auditor 2026-04-21 04:06:03 +00:00
attawaycuningham-ctrl 2d9b08d462 Add prompt: Feynman’s Nitpick Game 2026-04-21 04:06:03 +00:00
fede.gazzelloni@gmail.com b5c803d75f Update prompt: Article Summarizer 2026-04-21 04:06:02 +00:00
debashis.sarker@gmail.com c9e77d408a Update prompt: The Technical Co-Founder: Building Real Products Together 2026-04-21 04:06:02 +00:00
aymanrabeemac@gmail.com 667c30fb3a Update prompt: Code Review Specialist 2026-04-21 04:06:02 +00:00
nolanneff bf197fbd0f Update prompt: Code Review Specialist 2 2026-04-21 04:06:01 +00:00
ersinkoc a7cbdcc6bd Update prompt: Echoes of the Rust Age 2026-04-21 04:06:01 +00:00
cnwdy888@gmail.com 29831a5a38 Update prompt: Interview Preparation Coach 2026-04-21 04:06:00 +00:00
guangzhongzhang978@gmail.com 6b9cd41461 Update prompt: Virtual Doctor 2026-04-21 04:06:00 +00:00
f 04c3852e15 Update prompt: Code Review Assistant 2026-04-21 04:06:00 +00:00
devisasari eadd1acd57 Update prompt: Astrologer 2026-04-21 04:05:59 +00:00
iuzn 92ebea092f Update prompt: Prompt Generator 2026-04-21 04:05:59 +00:00
mustafasevim.dev@gmail.com 24d6a652b5 Add prompt: Create Content from Discord Blog for Hazel's Website 2026-04-20 04:10:41 +00:00
adediwuratemitope9-tech 64c9feaf63 Add prompt: Lecturer 2026-04-20 04:10:41 +00:00
xiaoyucunx f4ae4ee256 Update prompt: Code Review Specialist 2026-04-20 04:10:41 +00:00
cperalesg@gmail.com a8d8a09660 Update prompt: Prompt Generator 2026-04-20 04:10:40 +00:00
panda667 4d5a2a1f11 Update prompt: Astrologer 2026-04-20 04:10:40 +00:00
joembolinas 6c42da91fc Update prompt: The Technical Co-Founder: Building Real Products Together 2026-04-20 04:10:39 +00:00
aitank2020@gmail.com 877f127b39 Update prompt: Echoes of the Rust Age 2026-04-20 04:10:39 +00:00
dragoy18@gmail.com 2ce1c95de0 Update prompt: Code Review Specialist 2 2026-04-20 04:10:39 +00:00
lior1976@gmail.com b0032caef4 Update prompt: Article Summarizer 2026-04-20 04:10:38 +00:00
beresasis@gmail.com 15df4b5a89 Update prompt: Interview Preparation Coach 2026-04-20 04:10:38 +00:00
sinansonmez c3c6af9680 Update prompt: Code Review Assistant 2026-04-20 04:10:37 +00:00
giorgiop e0df66f2d7 Update prompt: Virtual Doctor 2026-04-20 04:10:37 +00:00
senoldak 5b2ac47aa9 Add prompt: GitHub SSH Setup for Students (Existing Repository, Clone & Push Ready) 2026-04-19 04:06:48 +00:00
senoldak 52f4e19cab Add prompt: Setup and Bootstrap a Flutter Development Environment 2026-04-19 04:06:47 +00:00
mvel20342@gmail.com 7ebc0dd98e Add prompt: MDCT Step-by-Step Calculation 2026-04-19 04:06:47 +00:00
fede.gazzelloni@gmail.com f333176ea4 Update prompt: Article Summarizer 2026-04-19 04:06:47 +00:00
debashis.sarker@gmail.com bd69b8a0d4 Update prompt: The Technical Co-Founder: Building Real Products Together 2026-04-19 04:06:46 +00:00
aymanrabeemac@gmail.com df145c3642 Update prompt: Code Review Specialist 2026-04-19 04:06:46 +00:00
nolanneff 89f6383f46 Update prompt: Code Review Specialist 2 2026-04-19 04:06:45 +00:00
ersinkoc 7ca05c249c Update prompt: Echoes of the Rust Age 2026-04-19 04:06:45 +00:00
cnwdy888@gmail.com ff3be1ccb8 Update prompt: Interview Preparation Coach 2026-04-19 04:06:44 +00:00
guangzhongzhang978@gmail.com 3fd43091d7 Update prompt: Virtual Doctor 2026-04-19 04:06:44 +00:00
f 6bf6ebd3c8 Update prompt: Code Review Assistant 2026-04-19 04:06:44 +00:00
devisasari 8cf0e58adb Update prompt: Astrologer 2026-04-19 04:06:43 +00:00
iuzn bf33cd262b Update prompt: Prompt Generator 2026-04-19 04:06:43 +00:00
amvicioushecs 191973a988 Add prompt: Brandable Domain Name Finder 2026-04-18 04:00:00 +00:00
amvicioushecs 5c5a812e6e Add prompt: Business Idea Evaluation and Scoring 2026-04-18 04:00:00 +00:00
xiaoyucunx 97037d059d Update prompt: Code Review Specialist 2026-04-18 03:59:59 +00:00
cperalesg@gmail.com 32eae5997d Update prompt: Prompt Generator 2026-04-18 03:59:59 +00:00
panda667 c31cf70e60 Update prompt: Astrologer 2026-04-18 03:59:58 +00:00
joembolinas e4e39e99b3 Update prompt: The Technical Co-Founder: Building Real Products Together 2026-04-18 03:59:58 +00:00
aitank2020@gmail.com 8173153a96 Update prompt: Echoes of the Rust Age 2026-04-18 03:59:57 +00:00
dragoy18@gmail.com 496543eefd Update prompt: Code Review Specialist 2 2026-04-18 03:59:57 +00:00
lior1976@gmail.com 1b14efee19 Update prompt: Article Summarizer 2026-04-18 03:59:57 +00:00
beresasis@gmail.com 0580f7e799 Update prompt: Interview Preparation Coach 2026-04-18 03:59:56 +00:00
sinansonmez 89f3171525 Update prompt: Code Review Assistant 2026-04-18 03:59:56 +00:00
giorgiop b845777235 Update prompt: Virtual Doctor 2026-04-18 03:59:55 +00:00
serinityconya@gmail.com ac10a7b084 Add prompt: Alexa Said THIS… and Miss Nancy Didn’t Like It 😳 2026-04-17 04:06:02 +00:00
youssefkhalafabdullatif@gmail.com 40f3816d19 Add prompt: Notion Transcript Designer Prompt 2026-04-17 04:06:02 +00:00
senoldak 5aa8a804b7 Add prompt: 🧠 PromptAudit 2026-04-17 04:06:02 +00:00
fede.gazzelloni@gmail.com 590275cbc9 Update prompt: Article Summarizer 2026-04-17 04:06:01 +00:00
debashis.sarker@gmail.com 5c2fbbbe76 Update prompt: The Technical Co-Founder: Building Real Products Together 2026-04-17 04:06:01 +00:00
aymanrabeemac@gmail.com 2cfd9b366b Update prompt: Code Review Specialist 2026-04-17 04:06:00 +00:00
nolanneff 5f238a8d89 Update prompt: Code Review Specialist 2 2026-04-17 04:06:00 +00:00
ersinkoc d54c09f2a8 Update prompt: Echoes of the Rust Age 2026-04-17 04:06:00 +00:00
cnwdy888@gmail.com 4d1b8aa407 Update prompt: Interview Preparation Coach 2026-04-17 04:05:59 +00:00
guangzhongzhang978@gmail.com 100d21e7b3 Update prompt: Virtual Doctor 2026-04-17 04:05:59 +00:00
f 9525632ada Update prompt: Code Review Assistant 2026-04-17 04:05:58 +00:00
devisasari d2d05531f8 Update prompt: Astrologer 2026-04-17 04:05:58 +00:00
iuzn eab3a138af Update prompt: Prompt Generator 2026-04-17 04:05:58 +00:00
Fatih Kadir Akın 4407fa25f4 docs(book): update author bio to Automattic across all locales 2026-04-16 21:03:59 +03:00
mrgrey565-ux db42383830 Add prompt: Mbbs 2026-04-16 04:06:45 +00:00
lopezanth661@gmail.com 721729577a Add prompt: Audio Routing Automation Engineer 2026-04-16 04:06:45 +00:00
lopezanth661@gmail.com d046b9d32f Add prompt: ubuntu audio input/output,loop/virtual connection specialist 2026-04-16 04:06:44 +00:00
kevjones7563@gmail.com 6c04cf4d2d Add prompt: MAP 2026-04-16 04:06:44 +00:00
balajiforaix@gmail.com d2d46b27db Add prompt: create prompt for audit purpose on password configuartion file for linux 2026-04-16 04:06:43 +00:00
senoldak f8b71770a9 Add prompt: Cinematic Sunset Boat Scene 2026-04-16 04:06:43 +00:00
senoldak 8cb0b44b94 Add prompt: Dramatic Horse Silhouette in Cinematic Lighting 2026-04-16 04:06:43 +00:00
senoldak 4de3925110 Add prompt: Serene Autumn Lakeside Illustration 2026-04-16 04:06:42 +00:00
adediwuratemitope9-tech f55a499676 Add prompt: Picture 2026-04-16 04:06:42 +00:00
xiaoyucunx 716a3e318d Update prompt: Code Review Specialist 2026-04-16 04:06:41 +00:00
cperalesg@gmail.com d72fb97041 Update prompt: Prompt Generator 2026-04-16 04:06:41 +00:00
panda667 34553d8da3 Update prompt: Astrologer 2026-04-16 04:06:41 +00:00
joembolinas e5bd9b894d Update prompt: The Technical Co-Founder: Building Real Products Together 2026-04-16 04:06:40 +00:00
aitank2020@gmail.com db0aebe7ca Update prompt: Echoes of the Rust Age 2026-04-16 04:06:40 +00:00
dragoy18@gmail.com 522bb0f5e8 Update prompt: Code Review Specialist 2 2026-04-16 04:06:39 +00:00
lior1976@gmail.com 971758ccee Update prompt: Article Summarizer 2026-04-16 04:06:39 +00:00
beresasis@gmail.com bc0edd3b8a Update prompt: Interview Preparation Coach 2026-04-16 04:06:38 +00:00
sinansonmez c47187c18e Update prompt: Code Review Assistant 2026-04-16 04:06:38 +00:00
giorgiop 392086f671 Update prompt: Virtual Doctor 2026-04-16 04:06:38 +00:00
kriptoburak 244ad5568b Add prompt: X Twitter Scraper 2026-04-15 04:05:09 +00:00
tcyjg 41927597f0 Add prompt: prd-and-technical-documentation-generator 2026-04-15 04:05:09 +00:00
yazz4444 f6a56a61be Add prompt: karpathy-guidelines 2026-04-15 04:05:08 +00:00
papanito b533cd4266 Update prompt: Terraform Platform Engineer 2026-04-15 04:05:08 +00:00
fede.gazzelloni@gmail.com f8b9642e55 Update prompt: Article Summarizer 2026-04-15 04:05:07 +00:00
debashis.sarker@gmail.com 125b8220a4 Update prompt: The Technical Co-Founder: Building Real Products Together 2026-04-15 04:05:07 +00:00
aymanrabeemac@gmail.com d4a57af24d Update prompt: Code Review Specialist 2026-04-15 04:05:07 +00:00
nolanneff 9b42956b0f Update prompt: Code Review Specialist 2 2026-04-15 04:05:06 +00:00
ersinkoc d715f2616e Update prompt: Echoes of the Rust Age 2026-04-15 04:05:06 +00:00
cnwdy888@gmail.com b14c80af1c Update prompt: Interview Preparation Coach 2026-04-15 04:05:05 +00:00
guangzhongzhang978@gmail.com bc8e7abf26 Update prompt: Virtual Doctor 2026-04-15 04:05:05 +00:00
f 8484e74dea Update prompt: Code Review Assistant 2026-04-15 04:05:04 +00:00
devisasari 63e9a34d73 Update prompt: Astrologer 2026-04-15 04:05:04 +00:00
iuzn 20a0380e47 Update prompt: Prompt Generator 2026-04-15 04:05:04 +00:00
aufa.g07@gmail.com ff2310a0de Add prompt: Mockup Interview using Gemini Live 2026-04-14 04:05:22 +00:00
c.aksan@gmail.com 244ccd1b03 Add prompt: Web Typography 2026-04-14 04:05:22 +00:00
xiaoyucunx 9d0650d555 Update prompt: Code Review Specialist 2026-04-14 04:05:21 +00:00
cperalesg@gmail.com 3039834e85 Update prompt: Prompt Generator 2026-04-14 04:05:21 +00:00
panda667 5f7b91f233 Update prompt: Astrologer 2026-04-14 04:05:20 +00:00
joembolinas bb77b06047 Update prompt: The Technical Co-Founder: Building Real Products Together 2026-04-14 04:05:20 +00:00
aitank2020@gmail.com 33b252b533 Update prompt: Echoes of the Rust Age 2026-04-14 04:05:19 +00:00
dragoy18@gmail.com fb5336bf15 Update prompt: Code Review Specialist 2 2026-04-14 04:05:19 +00:00
lior1976@gmail.com c15340d5fd Update prompt: Article Summarizer 2026-04-14 04:05:18 +00:00
beresasis@gmail.com 82515da893 Update prompt: Interview Preparation Coach 2026-04-14 04:05:18 +00:00
sinansonmez c2fa700dc1 Update prompt: Code Review Assistant 2026-04-14 04:05:18 +00:00
giorgiop 9e9794ece3 Update prompt: Virtual Doctor 2026-04-14 04:05:17 +00:00
Nick2bad4u eb7167bb4f Add prompt: Stylelint Plugin Author 2026-04-13 04:10:21 +00:00
fede.gazzelloni@gmail.com 546af4b7c6 Update prompt: Article Summarizer 2026-04-13 04:10:21 +00:00
debashis.sarker@gmail.com 6df8c63144 Update prompt: The Technical Co-Founder: Building Real Products Together 2026-04-13 04:10:21 +00:00
aymanrabeemac@gmail.com 445c968279 Update prompt: Code Review Specialist 2026-04-13 04:10:20 +00:00
nolanneff d54d57ec63 Update prompt: Code Review Specialist 2 2026-04-13 04:10:20 +00:00
ersinkoc e79e8899a1 Update prompt: Echoes of the Rust Age 2026-04-13 04:10:19 +00:00
cnwdy888@gmail.com 8c453beeca Update prompt: Interview Preparation Coach 2026-04-13 04:10:19 +00:00
guangzhongzhang978@gmail.com d7c95f285e Update prompt: Virtual Doctor 2026-04-13 04:10:18 +00:00
f 5f5df223e8 Update prompt: Code Review Assistant 2026-04-13 04:10:18 +00:00
devisasari 115a1a1c1f Update prompt: Astrologer 2026-04-13 04:10:17 +00:00
iuzn 28ffd9510d Update prompt: Prompt Generator 2026-04-13 04:10:17 +00:00
joembolinas bc39bce60d Add prompt: AI Productivity Artifact Generator 2026-04-12 04:07:01 +00:00
raselggg2@gmail.com 080088e8eb Add prompt: Meta Agent Builder for Letta Platform 2026-04-12 04:07:00 +00:00
xiaoyucunx 47df8696a6 Update prompt: Code Review Specialist 2026-04-12 04:07:00 +00:00
cperalesg@gmail.com f322f5e1d3 Update prompt: Prompt Generator 2026-04-12 04:06:59 +00:00
panda667 01c8e764b2 Update prompt: Astrologer 2026-04-12 04:06:59 +00:00
joembolinas 119927b565 Update prompt: The Technical Co-Founder: Building Real Products Together 2026-04-12 04:06:59 +00:00
aitank2020@gmail.com 5a31ae302f Update prompt: Echoes of the Rust Age 2026-04-12 04:06:58 +00:00
dragoy18@gmail.com b7f4a3a574 Update prompt: Code Review Specialist 2 2026-04-12 04:06:58 +00:00
lior1976@gmail.com 83792fd623 Update prompt: Article Summarizer 2026-04-12 04:06:57 +00:00
beresasis@gmail.com 6993af2416 Update prompt: Interview Preparation Coach 2026-04-12 04:06:57 +00:00
sinansonmez 6385bc9efe Update prompt: Code Review Assistant 2026-04-12 04:06:56 +00:00
giorgiop 551934cf6a Update prompt: Virtual Doctor 2026-04-12 04:06:56 +00:00
traouiicho@gmail.com f03a255314 Add prompt: Expert en Analyse du Marché eCommerce en Algérie 2026-04-11 03:53:08 +00:00
oscar.nesis@gmail.com 6d07da5661 Add prompt: Potato Critic 2026-04-11 03:53:08 +00:00
jinz8848@gmail.com 5c51243f9c Add prompt: Low Voltage Electrical Theory Guide 2026-04-11 03:53:07 +00:00
fede.gazzelloni@gmail.com 7df98ae282 Update prompt: Article Summarizer 2026-04-11 03:53:07 +00:00
debashis.sarker@gmail.com ab5f2336bc Update prompt: The Technical Co-Founder: Building Real Products Together 2026-04-11 03:53:06 +00:00
aymanrabeemac@gmail.com a1a65012f2 Update prompt: Code Review Specialist 2026-04-11 03:53:06 +00:00
nolanneff 43b01089cc Update prompt: Code Review Specialist 2 2026-04-11 03:53:06 +00:00
ersinkoc 2d2ae2f269 Update prompt: Echoes of the Rust Age 2026-04-11 03:53:05 +00:00
cnwdy888@gmail.com 1473468b4c Update prompt: Interview Preparation Coach 2026-04-11 03:53:05 +00:00
guangzhongzhang978@gmail.com e01a0b1b8b Update prompt: Virtual Doctor 2026-04-11 03:53:04 +00:00
f d2602b765d Update prompt: Code Review Assistant 2026-04-11 03:53:04 +00:00
devisasari 885e136f16 Update prompt: Astrologer 2026-04-11 03:53:03 +00:00
iuzn f241b7047c Update prompt: Prompt Generator 2026-04-11 03:53:03 +00:00
arimerzhu1@gmail.com 25a286b0b7 Add prompt: Adaptive Thinking Framework 2026-04-10 04:05:10 +00:00
traouiicho@gmail.com b66ce33ced Add prompt: Research and Presentation on Energy Forms 2026-04-10 04:05:10 +00:00
vj.briceno89@gmail.com 3083097885 Add prompt: Web App Security Code Review (OWASP) - Public Test 2026-04-10 04:05:09 +00:00
phambichha55684@gmail.com e9df744b5e Add prompt: AI-Generated Patent Illustration Instructions 2026-04-10 04:05:09 +00:00
phambichha55684@gmail.com 62799acdb6 Add prompt: Patent Illustration Design with SolidWorks and Origin Styles 2026-04-10 04:05:08 +00:00
Isha2790 c21c7917ce Add prompt: Instagram Profile Search Navigator 2026-04-10 04:05:08 +00:00
sonucahmet@gmail.com 47bd0b446a Add prompt: Celebratory Student Exam Result Reveal 2026-04-10 04:05:08 +00:00
sonucahmet@gmail.com fc48e88628 Add prompt: Cute Family Cartoon Sticker Design 2026-04-10 04:05:07 +00:00
sonucahmet@gmail.com 9738ad3029 Add prompt: 1950s Diner Photo Transformation 2026-04-10 04:05:07 +00:00
sonucahmet@gmail.com 5e9a47ec2e Add prompt: Transforming a Photo into a Post-Apocalyptic Scene 2026-04-10 04:05:06 +00:00
sonucahmet@gmail.com 97f3d1be35 Add prompt: Galactic Smuggler 2026-04-10 04:05:06 +00:00
sonucahmet@gmail.com f76f989937 Add prompt: Paint 2026-04-10 04:05:06 +00:00
sonucahmet@gmail.com 7f916a402f Add prompt: Japan 2026-04-10 04:05:05 +00:00
sonucahmet@gmail.com f0a1faa3ab Add prompt: Atari 2026-04-10 04:05:05 +00:00
sonucahmet@gmail.com 6616c8fc88 Add prompt: Cowboy 2026-04-10 04:05:04 +00:00
sonucahmet@gmail.com d72e82e156 Add prompt: Viking 2026-04-10 04:05:04 +00:00
xiaoyucunx 3eda5a6c5c Update prompt: Code Review Specialist 2026-04-10 04:05:04 +00:00
cperalesg@gmail.com 85e989b024 Update prompt: Prompt Generator 2026-04-10 04:05:03 +00:00
panda667 26ea905cae Update prompt: Astrologer 2026-04-10 04:05:03 +00:00
joembolinas c8e5c25579 Update prompt: The Technical Co-Founder: Building Real Products Together 2026-04-10 04:05:02 +00:00
aitank2020@gmail.com b686783c84 Update prompt: Echoes of the Rust Age 2026-04-10 04:05:02 +00:00
dragoy18@gmail.com 337e8d6da9 Update prompt: Code Review Specialist 2 2026-04-10 04:05:01 +00:00
lior1976@gmail.com d079830824 Update prompt: Article Summarizer 2026-04-10 04:05:01 +00:00
beresasis@gmail.com ef26867bce Update prompt: Interview Preparation Coach 2026-04-10 04:05:01 +00:00
sinansonmez fd5c81cb96 Update prompt: Code Review Assistant 2026-04-10 04:05:00 +00:00
giorgiop f16c0cbb2c Update prompt: Virtual Doctor 2026-04-10 04:05:00 +00:00
davidmytton 9e93f161df Add prompt: Add AI protection 2026-04-09 04:00:00 +00:00
eng.mohammed.3499@gmail.com df49ad34f7 Add prompt: pdfcount 2026-04-09 03:59:59 +00:00
samsungeindia@gmail.com cf636d5b2d Add prompt: Tr 2026-04-09 03:59:59 +00:00
macro4lifeahk@gmail.com 845075fb5b Add prompt: mc 2026-04-09 03:59:59 +00:00
fede.gazzelloni@gmail.com c69ce3e1b9 Update prompt: Article Summarizer 2026-04-09 03:59:58 +00:00
debashis.sarker@gmail.com 784fd069b2 Update prompt: The Technical Co-Founder: Building Real Products Together 2026-04-09 03:59:58 +00:00
aymanrabeemac@gmail.com 990830213d Update prompt: Code Review Specialist 2026-04-09 03:59:58 +00:00
nolanneff f1dc6c9189 Update prompt: Code Review Specialist 2 2026-04-09 03:59:57 +00:00
ersinkoc e944bde4b9 Update prompt: Echoes of the Rust Age 2026-04-09 03:59:57 +00:00
cnwdy888@gmail.com e05a450b1f Update prompt: Interview Preparation Coach 2026-04-09 03:59:56 +00:00
guangzhongzhang978@gmail.com ad403cf0e1 Update prompt: Virtual Doctor 2026-04-09 03:59:56 +00:00
f ffe11ff7d2 Update prompt: Code Review Assistant 2026-04-09 03:59:56 +00:00
devisasari 5695064fd6 Update prompt: Astrologer 2026-04-09 03:59:55 +00:00
iuzn c8b88d36c3 Update prompt: Prompt Generator 2026-04-09 03:59:55 +00:00
Fatih Kadir Akın 7d123764be docs(governance): Add governance model for prompts.chat
Entire-Checkpoint: f46e55e56e6d
2026-04-08 21:47:03 +03:00
senoldak 34f95c35cc Add prompt: Typographic Portrait Artwork Creation 2026-04-08 04:01:38 +00:00
mbaigrace1@gmail.com 875e3d75ff Add prompt: Sacrifice in obedience 2026-04-08 04:01:38 +00:00
achen8208@gmail.com 3b40564ebe Add prompt: Game design 2026-04-08 04:01:37 +00:00
Mre4321 2f9da25028 Add prompt: WEB Product Architect 2026-04-08 04:01:37 +00:00
xiaoyucunx 01535692cf Update prompt: Code Review Specialist 2026-04-08 04:01:36 +00:00
cperalesg@gmail.com cb996aee38 Update prompt: Prompt Generator 2026-04-08 04:01:36 +00:00
panda667 d755438db3 Update prompt: Astrologer 2026-04-08 04:01:36 +00:00
joembolinas d38bf8ac5f Update prompt: The Technical Co-Founder: Building Real Products Together 2026-04-08 04:01:35 +00:00
aitank2020@gmail.com 0fc15712ca Update prompt: Echoes of the Rust Age 2026-04-08 04:01:35 +00:00
dragoy18@gmail.com ef1b2eeb88 Update prompt: Code Review Specialist 2 2026-04-08 04:01:34 +00:00
lior1976@gmail.com 7adfba1d25 Update prompt: Article Summarizer 2026-04-08 04:01:34 +00:00
beresasis@gmail.com 84ede7d286 Update prompt: Interview Preparation Coach 2026-04-08 04:01:34 +00:00
sinansonmez c0df4475f9 Update prompt: Code Review Assistant 2026-04-08 04:01:33 +00:00
giorgiop 8cb38f19ee Update prompt: Virtual Doctor 2026-04-08 04:01:33 +00:00
Fatih Kadir Akın f59be0bbfc Merge pull request #1132 from suyua9/suyua9-prompts-docs-runtime-requirements
docs: align runtime requirements with current setup
2026-04-07 14:06:29 +03:00
dishantpatel624@gmail.com dfa9d65201 Add prompt: 🔧 AI App Improvement Loop Prompt 2026-04-07 04:00:47 +00:00
senoldak 2960fececf Add prompt: Interstellar Movie Poster Illustration 2026-04-07 04:00:47 +00:00
nguyenphonglc2004@gmail.com ccbc30f1b2 Add prompt: Futuristic Alps in 2150 2026-04-07 04:00:47 +00:00
fede.gazzelloni@gmail.com a1c9221feb Update prompt: Article Summarizer 2026-04-07 04:00:46 +00:00
debashis.sarker@gmail.com a132207741 Update prompt: The Technical Co-Founder: Building Real Products Together 2026-04-07 04:00:46 +00:00
aymanrabeemac@gmail.com b1b7c92177 Update prompt: Code Review Specialist 2026-04-07 04:00:46 +00:00
nolanneff 87f3416ff6 Update prompt: Code Review Specialist 2 2026-04-07 04:00:45 +00:00
ersinkoc 1cdc12e5cd Update prompt: Echoes of the Rust Age 2026-04-07 04:00:45 +00:00
cnwdy888@gmail.com 5f7f48a3d5 Update prompt: Interview Preparation Coach 2026-04-07 04:00:44 +00:00
guangzhongzhang978@gmail.com 960c6f311d Update prompt: Virtual Doctor 2026-04-07 04:00:44 +00:00
f f244d173da Update prompt: Code Review Assistant 2026-04-07 04:00:44 +00:00
devisasari e8b78194ab Update prompt: Astrologer 2026-04-07 04:00:43 +00:00
iuzn b3343588a8 Update prompt: Prompt Generator 2026-04-07 04:00:43 +00:00
c.burke0327@gmail.com 71a512717c Add prompt: Ultimate Stake.us Dice Wagering Strategy Builder — Rollover & Playthrough Completion 2026-04-06 04:04:39 +00:00
papanito c7b99eb58d Add prompt: Packer Automation & Imaging Expert 2026-04-06 04:04:39 +00:00
senoldak a6b31edde9 Add prompt: Ocean’s Eleven Movie Poster Illustration 2026-04-06 04:04:38 +00:00
softdsk@gmail.com 22128ad609 Add prompt: DOE Framework - Directions Template 2026-04-06 04:04:38 +00:00
luis-c2255 2218679430 Add prompt: Birthday Message Generator – 3 Styles 2026-04-06 04:04:38 +00:00
luis-c2255 6720d8e98e Add prompt: Customizable Birthday Message Generator 2026-04-06 04:04:37 +00:00
overb0355@gmail.com ffebf6f7aa Add prompt: Professional photo editor 2026-04-06 04:04:37 +00:00
ia-kobos 8ab8f315e4 Add prompt: Online Job Search Assistant 2026-04-06 04:04:36 +00:00
xiaoyucunx 8d0cd68cf1 Update prompt: Code Review Specialist 2026-04-06 04:04:36 +00:00
cperalesg@gmail.com 608370d289 Update prompt: Prompt Generator 2026-04-06 04:04:36 +00:00
panda667 3be780ed1b Update prompt: Astrologer 2026-04-06 04:04:35 +00:00
joembolinas 67f15ed17d Update prompt: The Technical Co-Founder: Building Real Products Together 2026-04-06 04:04:35 +00:00
aitank2020@gmail.com 31b32ada8e Update prompt: Echoes of the Rust Age 2026-04-06 04:04:34 +00:00
dragoy18@gmail.com 6c065a7250 Update prompt: Code Review Specialist 2 2026-04-06 04:04:34 +00:00
lior1976@gmail.com c04537b77a Update prompt: Article Summarizer 2026-04-06 04:04:33 +00:00
beresasis@gmail.com 32853142de Update prompt: Interview Preparation Coach 2026-04-06 04:04:33 +00:00
sinansonmez a64c8168ac Update prompt: Code Review Assistant 2026-04-06 04:04:33 +00:00
giorgiop 34d2b25be5 Update prompt: Virtual Doctor 2026-04-06 04:04:32 +00:00
ezezpeer@gmail.com 92d9d6cd0d Add prompt: Creating PWA AI Chatbot 2026-04-05 04:03:00 +00:00
hakanak54@gmail.com 3687e57cbd Add prompt: site analiz 2026-04-05 04:03:00 +00:00
1753932465@qq.com 3253864d4c Add prompt: 创设情境串联知识 2026-04-05 04:02:59 +00:00
fede.gazzelloni@gmail.com 2cd9fd2406 Update prompt: Article Summarizer 2026-04-05 04:02:59 +00:00
debashis.sarker@gmail.com 73fd0fa17e Update prompt: The Technical Co-Founder: Building Real Products Together 2026-04-05 04:02:58 +00:00
aymanrabeemac@gmail.com b6b1065517 Update prompt: Code Review Specialist 2026-04-05 04:02:58 +00:00
nolanneff 39d32e52ae Update prompt: Code Review Specialist 2 2026-04-05 04:02:58 +00:00
ersinkoc d5ace59c9b Update prompt: Echoes of the Rust Age 2026-04-05 04:02:57 +00:00
cnwdy888@gmail.com 290d512537 Update prompt: Interview Preparation Coach 2026-04-05 04:02:57 +00:00
guangzhongzhang978@gmail.com cd00f2aa3e Update prompt: Virtual Doctor 2026-04-05 04:02:56 +00:00
f f09d1e5f8f Update prompt: Code Review Assistant 2026-04-05 04:02:56 +00:00
devisasari df192b8e25 Update prompt: Astrologer 2026-04-05 04:02:56 +00:00
iuzn 665d761265 Update prompt: Prompt Generator 2026-04-05 04:02:55 +00:00
seymayasar468@gmail.com 812c71dc7a Add prompt: The Colorful Fish Learning Emotions 2026-04-04 03:51:10 +00:00
xiaoyucunx 4f4428a647 Update prompt: Code Review Specialist 2026-04-04 03:51:09 +00:00
cperalesg@gmail.com 3a106af89c Update prompt: Prompt Generator 2026-04-04 03:51:09 +00:00
panda667 e755eacd46 Update prompt: Astrologer 2026-04-04 03:51:09 +00:00
joembolinas 785662faab Update prompt: The Technical Co-Founder: Building Real Products Together 2026-04-04 03:51:08 +00:00
aitank2020@gmail.com 02dc8dd179 Update prompt: Echoes of the Rust Age 2026-04-04 03:51:08 +00:00
dragoy18@gmail.com 308e9c4bb3 Update prompt: Code Review Specialist 2 2026-04-04 03:51:07 +00:00
lior1976@gmail.com d70c4c642a Update prompt: Article Summarizer 2026-04-04 03:51:07 +00:00
beresasis@gmail.com 02f6b226fb Update prompt: Interview Preparation Coach 2026-04-04 03:51:07 +00:00
sinansonmez 9bc1a5ef37 Update prompt: Code Review Assistant 2026-04-04 03:51:06 +00:00
giorgiop ef7491bd2d Update prompt: Virtual Doctor 2026-04-04 03:51:06 +00:00
Fatih Kadir Akın 00ccf118be Merge pull request #1133 from Albin5jiji/main
docs: clarify memory requirements to prevent OOM (exit code 137)
2026-04-04 01:10:09 +03:00
Albin Thomas Jiji 7b3ef0c5b0 Merge pull request #1 from Albin5jiji/docs/clarify-build-memory-requirements
docs: clarify memory requirements to prevent OOM (exit code 137)
2026-04-04 01:52:22 +05:30
suyua9 c8d6fdf321 fix: localize self-hosting prerequisites 2026-04-03 23:53:57 +08:00
suyua9 eb7812761b docs: align runtime requirements with current setup 2026-04-03 23:44:06 +08:00
Albin Thomas Jiji 657a32f1e1 docs: clarify memory requirements to prevent OOM (exit code 137)
Clarifies higher memory usage during the first-run Next.js build step to prevent confusion when encountering exit code 137.
2026-04-03 09:42:28 +05:30
joshuawalker9988@gmail.com 4ab7cf10ea Add prompt: AI Cloning #1 - RAW 2026-04-03 03:59:00 +00:00
musatoktas 141a5d41f7 Add prompt: Claude Opus as SEO Auditor 2026-04-03 03:58:59 +00:00
fede.gazzelloni@gmail.com b4992b8186 Update prompt: Article Summarizer 2026-04-03 03:58:59 +00:00
debashis.sarker@gmail.com 8043b3fe53 Update prompt: The Technical Co-Founder: Building Real Products Together 2026-04-03 03:58:59 +00:00
aymanrabeemac@gmail.com d210e4ed28 Update prompt: Code Review Specialist 2026-04-03 03:58:58 +00:00
nolanneff 1aec69d936 Update prompt: Code Review Specialist 2 2026-04-03 03:58:58 +00:00
ersinkoc 8ce2f5c94c Update prompt: Echoes of the Rust Age 2026-04-03 03:58:57 +00:00
cnwdy888@gmail.com 0800b99579 Update prompt: Interview Preparation Coach 2026-04-03 03:58:57 +00:00
guangzhongzhang978@gmail.com 638390af46 Update prompt: Virtual Doctor 2026-04-03 03:58:56 +00:00
f 32398dc581 Update prompt: Code Review Assistant 2026-04-03 03:58:56 +00:00
devisasari f0c6d6f163 Update prompt: Astrologer 2026-04-03 03:58:56 +00:00
iuzn 9c83cbc0f0 Update prompt: Prompt Generator 2026-04-03 03:58:55 +00:00
xiaoyucunx 872757a6ad Update prompt: Code Review Specialist 2026-04-02 03:58:32 +00:00
cperalesg@gmail.com 6bdbde18b5 Update prompt: Prompt Generator 2026-04-02 03:58:32 +00:00
panda667 c295e141e1 Update prompt: Astrologer 2026-04-02 03:58:32 +00:00
joembolinas 314507c5d1 Update prompt: The Technical Co-Founder: Building Real Products Together 2026-04-02 03:58:31 +00:00
aitank2020@gmail.com ac62f192d6 Update prompt: Echoes of the Rust Age 2026-04-02 03:58:31 +00:00
dragoy18@gmail.com 28a9c19435 Update prompt: Code Review Specialist 2 2026-04-02 03:58:30 +00:00
lior1976@gmail.com f3c1b13d38 Update prompt: Article Summarizer 2026-04-02 03:58:30 +00:00
beresasis@gmail.com 8907a558c5 Update prompt: Interview Preparation Coach 2026-04-02 03:58:30 +00:00
sinansonmez ba4c9472c2 Update prompt: Code Review Assistant 2026-04-02 03:58:29 +00:00
giorgiop 325717871f Update prompt: Virtual Doctor 2026-04-02 03:58:29 +00:00
Fatih Kadir Akın 7119c0b95e Merge pull request #1122 from murataslan1/fix/cli-missing-full-content-param
fix(cli): add missing full_content param to API URL
2026-04-02 02:04:15 +03:00
ahmadawais 41b3ef58de Add prompt: aa/cli taste
Entire-Checkpoint: 4fb2dee7e542
2026-04-02 02:02:25 +03:00
matthew.growth.ng@gmail.com 7d5f71d8b7 Add prompt: Realistic Selfie of Girl with Transparent Glasses and Pink Hair
Entire-Checkpoint: fbed924fec92
2026-04-02 02:02:24 +03:00
parsherr e8cc186265 Add prompt: Realistic Mirror-Selfie Image Prompt
Entire-Checkpoint: d53ee5bb3c8c
2026-04-02 02:02:24 +03:00
privatemailgateway@gmail.com d3a5df905e Add prompt: Research Prompt (Mistral)
Entire-Checkpoint: 8df92fcf5e6e
2026-04-02 02:02:23 +03:00
tuankiet.infotech@gmail.com e7212c8eb6 Add prompt: Prompt Refiner
Entire-Checkpoint: fe690c74817f
2026-04-02 02:02:22 +03:00
fede.gazzelloni@gmail.com 87df0b2865 Update prompt: Article Summarizer
Entire-Checkpoint: 033eabb96831
2026-04-02 02:02:16 +03:00
debashis.sarker@gmail.com 6e52dc0cac Update prompt: The Technical Co-Founder: Building Real Products Together
Entire-Checkpoint: 8e51d57cee5e
2026-04-02 02:02:06 +03:00
aymanrabeemac@gmail.com 49f51459c5 Update prompt: Code Review Specialist
Entire-Checkpoint: f446120d7c7d
2026-04-02 02:01:57 +03:00
nolanneff d38bf619a5 Update prompt: Code Review Specialist 2
Entire-Checkpoint: 0d8121eecdb5
2026-04-02 02:01:47 +03:00
ersinkoc 7d8760ead1 Update prompt: Echoes of the Rust Age
Entire-Checkpoint: 5dc92302e473
2026-04-02 02:01:37 +03:00
cnwdy888@gmail.com 1799582f1f Update prompt: Interview Preparation Coach
Entire-Checkpoint: 54a36b9d1d3e
2026-04-02 02:01:28 +03:00
guangzhongzhang978@gmail.com 1eb4046261 Update prompt: Virtual Doctor
Entire-Checkpoint: c7c999e23fea
2026-04-02 02:01:18 +03:00
f 66ce235d30 Update prompt: Code Review Assistant
Entire-Checkpoint: 3e6cb616241a
2026-04-02 02:01:09 +03:00
devisasari b897498356 Update prompt: Astrologer
Entire-Checkpoint: 967b69be7526
2026-04-02 02:00:59 +03:00
iuzn 7ce28bea47 Update prompt: Prompt Generator
Entire-Checkpoint: 381a0a28701e
2026-04-02 02:00:50 +03:00
mehmet@mehmetince.net f46f69c0a1 Remove prompt: Step 1: Prepare your data
Entire-Checkpoint: 6f81999331e6
2026-04-02 02:00:40 +03:00
gokbeyinac 0765240fb4 Remove prompt: Kickstart Prompt for UX & UI Design
Entire-Checkpoint: ef5a2d1de5a6
2026-04-02 02:00:30 +03:00
Fatih Kadir Akın 491facec2e fix: rewrite contributor script to maintain row order and correct author attribution
The update loop previously rewrote the entire CSV in remote order, bundling
all row reordering and premature deletions into the first contributor's commit.
Now maintains an ordered list, mutating only the specific row per operation.
Also fixes double-@ emails for email-based contributors.

Made-with: Cursor
Entire-Checkpoint: d550254f429d
2026-04-02 01:58:05 +03:00
Fatih Kadir Akın 8976ddab13 Merge pull request #1123 from f/cursor/add-commandcode-runner
feat: add Command Code as sponsored code runner with clipboard flow
2026-04-02 01:48:13 +03:00
Fatih Kadir Akın 5db2734513 feat: add Command Code as sponsored code runner with clipboard flow
Made-with: Cursor
Entire-Checkpoint: e195189bbf0c
2026-04-02 01:46:42 +03:00
Murat Aslan 51ab7ebf4b fix(cli): add missing full_content param to API URL
The CLI was fetching prompts.json without ?full_content=true, so the
API returned contentPreview instead of the full content field. This
caused a crash when accessing prompt.content in PromptDetail.

Also added defensive null checks on prompt.content accesses in case
the API response is incomplete.

Closes #1107
2026-04-01 23:33:44 +03:00
gokbeyinac 8f120e826c Remove prompt: Kickstart Prompt for UX & UI Design 2026-04-01 04:06:51 +00:00
hrishirajnagawade@gmail.com c10f7fed99 Add prompt: Premium Classy Interview Presentation Design 2026-04-01 04:06:51 +00:00
DoguD 859d1879cf Add prompt: Version Review 2026-04-01 04:06:51 +00:00
mellowdrastic@gmail.com f60c1e1326 Add prompt: Bikini_Girl 2026-04-01 04:06:50 +00:00
rodelph0903@gmail.com 1d754b82b9 Add prompt: making ppt 2026-04-01 04:06:50 +00:00
amvicioushecs 1f176bd719 Add prompt: Voice Cloning Assistant 2026-04-01 04:06:50 +00:00
mellowdrastic@gmail.com cf58b4e07a Add prompt: Lonely cry 2026-04-01 04:06:50 +00:00
mellowdrastic@gmail.com b41371f917 Add prompt: Sapiosessuale 2026-04-01 04:06:49 +00:00
dewayanto1969@gmail.com 7f3298dc15 Add prompt: Accounting Information System 2026-04-01 04:06:49 +00:00
agsergio 7f178ddc61 Add prompt: Network Router emulator 2026-04-01 04:06:49 +00:00
sandraosemeke442@gmail.com 5611bdec4a Add prompt: Picture design 2026-04-01 04:06:48 +00:00
faizanshakilf@gmail.com 5d1c9810e7 Add prompt: Ben 2026-04-01 04:06:48 +00:00
xiaoyucunx d118835c46 Update prompt: Code Review Specialist 2026-04-01 04:06:48 +00:00
cperalesg@gmail.com 56934ab064 Update prompt: Prompt Generator 2026-04-01 04:06:47 +00:00
panda667 6e443ce487 Update prompt: Astrologer 2026-04-01 04:06:47 +00:00
joembolinas ccb204aca8 Update prompt: The Technical Co-Founder: Building Real Products Together 2026-04-01 04:06:47 +00:00
aitank2020@gmail.com 0ab4405951 Update prompt: Echoes of the Rust Age 2026-04-01 04:06:46 +00:00
dragoy18@gmail.com 5d109caf19 Update prompt: Code Review Specialist 2 2026-04-01 04:06:46 +00:00
lior1976@gmail.com 1d1c3f1df4 Update prompt: Article Summarizer 2026-04-01 04:06:45 +00:00
beresasis@gmail.com 9e9e90a9df Update prompt: Interview Preparation Coach 2026-04-01 04:06:45 +00:00
sinansonmez fa5f421521 Update prompt: Code Review Assistant 2026-04-01 04:06:45 +00:00
giorgiop 7642974a3b Update prompt: Virtual Doctor 2026-04-01 04:06:44 +00:00
Fatih Kadir Akın 571587ceac Merge pull request #1120 from Ardakilic/feat/docker-compose
feat: docker compose
2026-03-31 17:13:23 +03:00
Arda Kilicdagi a147e99933 chore: address additional nitpick coderabbitai feedback 2026-03-31 16:24:43 +03:00
Arda Kilicdagi 956a3e9acb chore: address coderabbitai feedback 2026-03-31 16:03:08 +03:00
Arda Kilicdagi 1bbac4f879 feat: docker compose 2026-03-31 15:09:10 +03:00
Arda Kilicdagi b05b5dd788 feat: docker compose 2026-03-31 15:08:05 +03:00
Fatih Kadir Akın fc08dbdefe Merge pull request #1119 from JohnPhamous/perf/prompts-isr 2026-03-31 08:38:45 +03:00
Fatih Kadir Akın a7177656a4 Merge pull request #1118 from JohnPhamous/perf/mcp-handler-optimization 2026-03-31 08:38:12 +03:00
Fatih Kadir Akın 07a43c119e Merge pull request #1117 from JohnPhamous/fix/mcp-get-405 2026-03-31 08:37:12 +03:00
gokbeyinac eeed2ac7cd Remove prompt: Kickstart Prompt for UX & UI Design 2026-03-31 04:01:21 +00:00
ah0sman 3b18df78b2 Add prompt: Translate Document to Arabic 2026-03-31 04:01:21 +00:00
evg1n 835fa2b9e7 Add prompt: Apple App Store Review Compliance Agent 2026-03-31 04:01:21 +00:00
fede.gazzelloni@gmail.com cff5e73e4b Update prompt: Article Summarizer 2026-03-31 04:01:20 +00:00
debashis.sarker@gmail.com 5087d4c985 Update prompt: The Technical Co-Founder: Building Real Products Together 2026-03-31 04:01:20 +00:00
aymanrabeemac@gmail.com d023f46031 Update prompt: Code Review Specialist 2026-03-31 04:01:19 +00:00
nolanneff ec37a8f49f Update prompt: Code Review Specialist 2 2026-03-31 04:01:19 +00:00
ersinkoc 94c22a6928 Update prompt: Echoes of the Rust Age 2026-03-31 04:01:19 +00:00
cnwdy888@gmail.com 2c91ac1be1 Update prompt: Interview Preparation Coach 2026-03-31 04:01:18 +00:00
guangzhongzhang978@gmail.com 9e56c46717 Update prompt: Virtual Doctor 2026-03-31 04:01:18 +00:00
f 5ae825cec2 Update prompt: Code Review Assistant 2026-03-31 04:01:17 +00:00
devisasari f47813face Update prompt: Astrologer 2026-03-31 04:01:17 +00:00
iuzn 5b5ea22964 Update prompt: Prompt Generator 2026-03-31 04:01:17 +00:00
John Pham a89b2e1aa0 perf: add ISR to /prompts page (60s revalidation)
This page has no auth() dependency and gets high traffic with
0% cache hit rate. ISR with 60s revalidation serves most
requests from cache while keeping content fresh.
2026-03-30 16:27:37 -07:00
John Pham 09aca8cf54 perf: optimize MCP handler DB queries and response sizes
- Remove content field from prompts/list DB query (was fetching
  2-10KB per prompt just to extract variables, never returned)
- Drop arguments from prompts/list response (optional per spec,
  clients get variables when they call GetPrompt)
- Replace 500-row slug fallback scan with indexed title query
- Reduce search_prompts contentPreview from 1000 to 300 chars
- Add in-memory auth cache (5-min TTL) for warm function instances
2026-03-30 16:26:30 -07:00
John Pham 2672888031 fix: return 405 on MCP GET per Streamable HTTP spec
The MCP Streamable HTTP spec requires servers to return either
text/event-stream (SSE) or 405 on GET requests. The previous
200 application/json response violated the spec and caused MCP
clients to enter SSE reconnection loops.

This server is stateless (no sessions, listChanged: false) and
never pushes notifications. Returning 405 tells clients no SSE
support and they stop retrying.

Ref: https://modelcontextprotocol.io/specification/2025-03-26/basic/transports
2026-03-30 16:22:49 -07:00
Fatih Kadir Akın 9c714ffaed Merge pull request #1091 from yoloni-9527/fix/remove-redundant-non-null-assertions-in-ezoic
fix: remove redundant non-null assertions in ezoic.ts
2026-03-30 22:04:17 +03:00
Fatih Kadir Akın 2161843876 Merge pull request #1113 from tech-architecti/fix/seed-missing-content
fix: seed script fails due to missing content field
2026-03-30 22:02:43 +03:00
Aldo Jimenez e4686cb9ee fix: seed script fails due to missing content field
The seed script fetches from /prompts.json without the ?full_content=true
parameter. The API only returns contentPreview by default, so the content
field is undefined, causing PrismaClientValidationError for every prompt.

Changes:
- Add ?full_content=true to the fetch URL
- Make content optional in RemotePrompt interface
- Skip prompts without content instead of failing

Before: Created 0 prompts (1595 skipped) with validation errors
After: Created 1576 prompts (19 skipped - no content)
2026-03-30 13:56:31 -04:00
gokbeyinac a25886cc9f Remove prompt: Kickstart Prompt for UX & UI Design 2026-03-30 04:05:04 +00:00
umutcanyildiz@gmail.com 0ab2e14ba9 Add prompt: Pixar-Style Family Wallpaper Prompt 2026-03-30 04:05:03 +00:00
helix-77 e39b33de04 Add prompt: Academic analyst and exam pattern extractor 2026-03-30 04:05:03 +00:00
etnologiaus2022@gmail.com a48aaafb92 Add prompt: question list for reaserch 2026-03-30 04:05:03 +00:00
etnologiaus2022@gmail.com 68613b8e5b Add prompt: comparison of social groups 2026-03-30 04:05:02 +00:00
etnologiaus2022@gmail.com ba061cf47a Add prompt: subculture 2026-03-30 04:05:02 +00:00
sanjanaganesh125@gmail.com 4d857b758a Add prompt: blood grouping detection using image processing 2026-03-30 04:05:02 +00:00
zhaoliminlawyer@gmail.com 64f3d6b0ae Add prompt: Expert Legal Analyst in Tax and Commercial Law 2026-03-30 04:05:01 +00:00
xiaoyucunx 8a7c529ede Update prompt: Code Review Specialist 2026-03-30 04:05:01 +00:00
cperalesg@gmail.com 0e5691ef18 Update prompt: Prompt Generator 2026-03-30 04:05:01 +00:00
panda667 c1f877932d Update prompt: Astrologer 2026-03-30 04:05:00 +00:00
joembolinas ae88a3004d Update prompt: The Technical Co-Founder: Building Real Products Together 2026-03-30 04:05:00 +00:00
aitank2020@gmail.com b7b4ffd2f0 Update prompt: Echoes of the Rust Age 2026-03-30 04:04:59 +00:00
dragoy18@gmail.com 4ff0b9405d Update prompt: Code Review Specialist 2 2026-03-30 04:04:59 +00:00
lior1976@gmail.com 22379515e3 Update prompt: Article Summarizer 2026-03-30 04:04:58 +00:00
beresasis@gmail.com d7156fa614 Update prompt: Interview Preparation Coach 2026-03-30 04:04:58 +00:00
sinansonmez 59f5760708 Update prompt: Code Review Assistant 2026-03-30 04:04:58 +00:00
giorgiop b44598b685 Update prompt: Virtual Doctor 2026-03-30 04:04:57 +00:00
gokbeyinac 41e4a95556 Remove prompt: Kickstart Prompt for UX & UI Design 2026-03-29 04:03:02 +00:00
senoldak c8172b605c Add prompt: Impressionistic Urban Solitude 2026-03-29 04:03:01 +00:00
senoldak 638ffee508 Add prompt: Abstract Geometric Art Prompt Inspired by Wassily Kandinsky 2026-03-29 04:03:01 +00:00
senoldak 6982b40688 Add prompt: Minimalist Graphic Illustration of a Stylized Dachshund 2026-03-29 04:03:01 +00:00
surendharnadh280709@gmail.com 027585f737 Add prompt: Architecture & UI/UX Audit 2026-03-29 04:03:00 +00:00
fede.gazzelloni@gmail.com acb64b9066 Update prompt: Article Summarizer 2026-03-29 04:03:00 +00:00
debashis.sarker@gmail.com a857cc862e Update prompt: The Technical Co-Founder: Building Real Products Together 2026-03-29 04:03:00 +00:00
aymanrabeemac@gmail.com 6821823fbd Update prompt: Code Review Specialist 2026-03-29 04:02:59 +00:00
nolanneff 08fa2687e6 Update prompt: Code Review Specialist 2 2026-03-29 04:02:59 +00:00
ersinkoc 75ffed8918 Update prompt: Echoes of the Rust Age 2026-03-29 04:02:58 +00:00
cnwdy888@gmail.com 379d0af081 Update prompt: Interview Preparation Coach 2026-03-29 04:02:58 +00:00
guangzhongzhang978@gmail.com 3dc8efe5e1 Update prompt: Virtual Doctor 2026-03-29 04:02:58 +00:00
f 35c4841d19 Update prompt: Code Review Assistant 2026-03-29 04:02:57 +00:00
devisasari 4f352a4dad Update prompt: Astrologer 2026-03-29 04:02:57 +00:00
iuzn 873622e3e4 Update prompt: Prompt Generator 2026-03-29 04:02:56 +00:00
Fatih Kadir Akın 233858f447 Merge pull request #1104 from mdisec/fix-private-prompt-history 2026-03-29 06:29:24 +03:00
Fatih Kadir Akın 7707781f0f Merge pull request #1101 from mdisec/fix-path-traversal-rce 2026-03-29 06:27:04 +03:00
gokbeyinac 4e6928edd4 Remove prompt: Kickstart Prompt for UX & UI Design 2026-03-28 03:51:36 +00:00
aliwattook966@gmail.com c755282408 Add prompt: psy 2026-03-28 03:51:35 +00:00
bortch d28959a637 Add prompt: Ultra-micro Functional Analyst Prompt 2026-03-28 03:51:35 +00:00
bortch 2b197551d6 Add prompt: Small Functional Analyst mode 2026-03-28 03:51:35 +00:00
bortch 01539ffdf4 Add prompt: Functional Analyst 2026-03-28 03:51:34 +00:00
iremaydas f00190aa20 Add prompt: base-R 2026-03-28 03:51:34 +00:00
papanito 1c585cd307 Add prompt: GitHub Enterprise Cloud (GHEC) administrator and power user 2026-03-28 03:51:34 +00:00
kyakhloufi@gmail.com bc67fa9e66 Add prompt: Scientific Paper Drafting Assistant 2026-03-28 03:51:34 +00:00
hrishirajnagawade@gmail.com a5d8c2bf14 Update prompt: In-Depth Paper and Exam Prediction Analyzer 2026-03-28 03:51:33 +00:00
xiaoyucunx 5df85eeb64 Update prompt: Code Review Specialist 2026-03-28 03:51:33 +00:00
cperalesg@gmail.com 43b22f36b9 Update prompt: Prompt Generator 2026-03-28 03:51:33 +00:00
panda667 33f150df11 Update prompt: Astrologer 2026-03-28 03:51:32 +00:00
joembolinas 4463fa3a94 Update prompt: The Technical Co-Founder: Building Real Products Together 2026-03-28 03:51:32 +00:00
aitank2020@gmail.com d5440e93f2 Update prompt: Echoes of the Rust Age 2026-03-28 03:51:31 +00:00
dragoy18@gmail.com 35d7cb1abc Update prompt: Code Review Specialist 2 2026-03-28 03:51:31 +00:00
lior1976@gmail.com de22a3fd1f Update prompt: Article Summarizer 2026-03-28 03:51:31 +00:00
beresasis@gmail.com d4de119db4 Update prompt: Interview Preparation Coach 2026-03-28 03:51:30 +00:00
sinansonmez 7cf33cb8fb Update prompt: Code Review Assistant 2026-03-28 03:51:30 +00:00
giorgiop 0ef72929f4 Update prompt: Virtual Doctor 2026-03-28 03:51:29 +00:00
gokbeyinac adb9e6fcca Remove prompt: Kickstart Prompt for UX & UI Design 2026-03-27 04:00:37 +00:00
papanito 0bf229c5ef Add prompt: Lazyvim expert 2026-03-27 04:00:36 +00:00
hrishirajnagawade@gmail.com c589742201 Add prompt: Website Design Recreator Skill 2026-03-27 04:00:36 +00:00
hrishirajnagawade@gmail.com 3e4b8a43b8 Add prompt: Website Design Recreation Workflow 2026-03-27 04:00:36 +00:00
fede.gazzelloni@gmail.com 0dd6521a9d Update prompt: Article Summarizer 2026-03-27 04:00:35 +00:00
debashis.sarker@gmail.com 05878ed7b3 Update prompt: The Technical Co-Founder: Building Real Products Together 2026-03-27 04:00:35 +00:00
aymanrabeemac@gmail.com b9683050fb Update prompt: Code Review Specialist 2026-03-27 04:00:35 +00:00
nolanneff b1e7d48714 Update prompt: Code Review Specialist 2 2026-03-27 04:00:34 +00:00
ersinkoc 57181398dc Update prompt: Echoes of the Rust Age 2026-03-27 04:00:34 +00:00
cnwdy888@gmail.com d970f349c2 Update prompt: Interview Preparation Coach 2026-03-27 04:00:34 +00:00
guangzhongzhang978@gmail.com e65790ed24 Update prompt: Virtual Doctor 2026-03-27 04:00:33 +00:00
f b983d57a39 Update prompt: Code Review Assistant 2026-03-27 04:00:33 +00:00
devisasari d74f71c49e Update prompt: Astrologer 2026-03-27 04:00:32 +00:00
iuzn 5fb7d29f78 Update prompt: Prompt Generator 2026-03-27 04:00:32 +00:00
gokbeyinac 3a17b27abf Remove prompt: Kickstart Prompt for UX & UI Design 2026-03-26 04:00:40 +00:00
ia-kobos fda723fdb7 Add prompt: Refine Your Resume for Professionalism and ATS Compatibility 2026-03-26 04:00:39 +00:00
vandanaparik4@gmail.com 4efa758797 Add prompt: presentation making 2026-03-26 04:00:39 +00:00
papanito d138a2c01e Add prompt: NixOS Linux Specialist 2026-03-26 04:00:39 +00:00
papanito 3e652d8777 Update prompt: Terraform Platform Engineer 2026-03-26 04:00:38 +00:00
xiaoyucunx 06d6005ffb Update prompt: Code Review Specialist 2026-03-26 04:00:38 +00:00
cperalesg@gmail.com 3a2f0e7114 Update prompt: Prompt Generator 2026-03-26 04:00:38 +00:00
panda667 4d635b4933 Update prompt: Astrologer 2026-03-26 04:00:37 +00:00
joembolinas a7c233c0a8 Update prompt: The Technical Co-Founder: Building Real Products Together 2026-03-26 04:00:37 +00:00
aitank2020@gmail.com 29f11a6074 Update prompt: Echoes of the Rust Age 2026-03-26 04:00:36 +00:00
dragoy18@gmail.com b1ab51b68a Update prompt: Code Review Specialist 2 2026-03-26 04:00:36 +00:00
lior1976@gmail.com 9fa925fd16 Update prompt: Article Summarizer 2026-03-26 04:00:36 +00:00
beresasis@gmail.com 8ce5bc60b7 Update prompt: Interview Preparation Coach 2026-03-26 04:00:35 +00:00
sinansonmez f9e6b5e3d2 Update prompt: Code Review Assistant 2026-03-26 04:00:35 +00:00
giorgiop 3b8d7d3d06 Update prompt: Virtual Doctor 2026-03-26 04:00:34 +00:00
Mehmet INCE d887c49b53 fix the prompt view perm issue for admin and adding unit tests 2026-03-25 21:05:06 +00:00
Mehmet INCE 20c6c26764 fix unit tests 2026-03-25 20:58:44 +00:00
Mehmet INCE 7b81836b21 -fix(security): enforce isPrivate checks on prompt sub-resource endpoints 2026-03-25 20:51:49 +00:00
Fatih Kadir Akın 289c52c2cb Merge pull request #1102 from mdisec/fix-ssrf-wiro 2026-03-25 18:23:47 +00:00
Mehmet INCE 66de14d3cf fix(security): wiro ssrf 2026-03-25 16:31:13 +00:00
Mehmet INCE 0f8d4c381a fix(security): harden skill zip packaging against path traversal and control char injection 2026-03-25 13:12:22 +00:00
Mehmet INCE 6d0bf7fffa fix path traversal leads to rce 2026-03-25 12:11:58 +00:00
Fatih Kadir Akın 30a8f0470e fix(security): prevent SSRF & credential leakage via Fal.ai status polling
Add assertFalOrigin() validation to getFalRequestStatus and
getFalRequestResult to ensure URLs point to trusted Fal.ai hosts
(queue.fal.run, fal.run) before attaching the API key.

Ref: https://gist.github.com/mdisec/27c0cac0ec6a8f3c8f85a18987ddb942
2026-03-25 10:55:54 +03:00
Fatih Kadir Akın 01f0587b42 chore(prompts): enable AI-powered search and generation features 2026-03-25 10:53:53 +03:00
Fatih Kadir Akın 9fe76ea4eb feat: add tiered rate limiting for MCP tool call endpoints 2026-03-25 10:50:07 +03:00
Fatih Kadir Akın 810de4d160 fix: replace explicit any types in prompts.json route 2026-03-25 10:35:30 +03:00
Fatih Kadir Akın 61abe5d8bc Merge pull request #1098 from mdisec/case-insensitive-exploit-fix
Fix username case-collision vulnerability across write and read paths
2026-03-25 07:23:41 +00:00
mellowdrastic@gmail.com ae41315c8f Remove prompt: Entagled IR 2026-03-25 03:52:15 +00:00
joshuawalker9988@gmail.com 4fb5d7787b Remove prompt: TEST 2026-03-25 03:52:15 +00:00
gokbeyinac 888c5260eb Remove prompt: Kickstart Prompt for UX & UI Design 2026-03-25 03:52:15 +00:00
hduggan72@gmail.com dbe1c98c13 Add prompt: Lifelike Face Mask 2026-03-25 03:52:14 +00:00
papanito 927e31471c Add prompt: Terraform Platform Engineer 2026-03-25 03:52:14 +00:00
mcyenerr@gmail.com 520ee79498 Add prompt: Professional Betting Predictions 2026-03-25 03:52:14 +00:00
dev.aniketlodh@gmail.com 32f2bb98e1 Add prompt: Linkedin Post Create Prompt 2026-03-25 03:52:13 +00:00
monapdx ebc1121c3f Add prompt: Fringe Ideology Quiz 2026-03-25 03:52:13 +00:00
monapdx d255cc342b Add prompt: Moral Dilemma Choices 2026-03-25 03:52:13 +00:00
monapdx 73004f638b Add prompt: Self-summary 2026-03-25 03:52:12 +00:00
monapdx a154ba9e0d Add prompt: Analyze Chat History With User 2026-03-25 03:52:12 +00:00
mehmet@mehmetince.net f2d6ae813c Add prompt: Step 1: Prepare your data 2026-03-25 03:52:12 +00:00
mohsamhef@gmail.com 0690e61da1 Add prompt: Researchers in the Library 2026-03-25 03:52:12 +00:00
mellowdrastic@gmail.com c13b3fb110 Add prompt: Odalisque 2026-03-25 03:52:11 +00:00
XiaoStore b521c8bdd1 Add prompt: GitHub Stars Fetcher with Agent Browser 2026-03-25 03:52:11 +00:00
fede.gazzelloni@gmail.com 03cf85dd7a Update prompt: Article Summarizer 2026-03-25 03:52:11 +00:00
debashis.sarker@gmail.com 0bdba06181 Update prompt: The Technical Co-Founder: Building Real Products Together 2026-03-25 03:52:10 +00:00
aymanrabeemac@gmail.com e6f6227e59 Update prompt: Code Review Specialist 2026-03-25 03:52:10 +00:00
thanos0000@gmail.com f7d592aecc Update prompt: I Think I Need a Lawyer — Neutral Legal Intake Organizer 2026-03-25 03:52:09 +00:00
nolanneff 13876fbb69 Update prompt: Code Review Specialist 2 2026-03-25 03:52:09 +00:00
ersinkoc 14e3b5a933 Update prompt: Echoes of the Rust Age 2026-03-25 03:52:09 +00:00
cnwdy888@gmail.com 5d7c79e168 Update prompt: Interview Preparation Coach 2026-03-25 03:52:08 +00:00
guangzhongzhang978@gmail.com 08c7844047 Update prompt: Virtual Doctor 2026-03-25 03:52:08 +00:00
f 75e7a4650d Update prompt: Code Review Assistant 2026-03-25 03:52:07 +00:00
devisasari 2f9d102d02 Update prompt: Astrologer 2026-03-25 03:52:07 +00:00
iuzn 465cb9286f Update prompt: Prompt Generator 2026-03-25 03:52:07 +00:00
Mehmet Ince cb0be62c40 adding migration files to lower index username and email 2026-03-24 18:27:55 +00:00
Mehmet Ince 30784e0740 drop case sensitive approach to the username and email across the app 2026-03-24 17:56:27 +00:00
Fatih Kadir Akın 283353a71a Merge pull request #1096 from sean-roberts/main
feat: Add support for running prompts on Netlify Agent Runners
2026-03-24 16:02:36 +00:00
Fatih Kadir Akın a934d3ead7 Merge pull request #1097 from mdisec/patch-1
Enhance security policy with reporting and disclosure details
2026-03-24 16:02:13 +00:00
Mehmet Ince 1464475df2 Fix username case-collision vulnerability across write and read paths 2026-03-24 16:00:26 +00:00
Mehmet INCE a4cfef1740 Enhance security policy with reporting and disclosure details
Expanded the security policy to include details on reporting vulnerabilities, CVE coordination, scope of issues, and disclosure policy.
2026-03-24 15:47:35 +00:00
Sean Roberts ecee044716 feat: Add support for running prompts on Netlify Agent Runners 2026-03-24 10:51:22 -04:00
mellowdrastic@gmail.com 0bd2b10706 Remove prompt: Love Shop 2026-03-24 03:51:07 +00:00
gokbeyinac e0cf29a07a Remove prompt: Kickstart Prompt for UX & UI Design 2026-03-24 03:51:06 +00:00
mellowdrastic@gmail.com feffd8a93c Add prompt: Entagled IR 2026-03-24 03:51:06 +00:00
this-is-lab 3c050db5c3 Add prompt: writer 2026-03-24 03:51:06 +00:00
joshuawalker9988@gmail.com 8c615d6233 Add prompt: TEST 2026-03-24 03:51:05 +00:00
xiaoyucunx 194bbd5996 Update prompt: Code Review Specialist 2026-03-24 03:51:05 +00:00
cperalesg@gmail.com 3002f6bb99 Update prompt: Prompt Generator 2026-03-24 03:51:05 +00:00
panda667 022c085241 Update prompt: Astrologer 2026-03-24 03:51:04 +00:00
joembolinas d71b78b20b Update prompt: The Technical Co-Founder: Building Real Products Together 2026-03-24 03:51:04 +00:00
aitank2020@gmail.com 6627d1020a Update prompt: Echoes of the Rust Age 2026-03-24 03:51:03 +00:00
dragoy18@gmail.com 9454df0585 Update prompt: Code Review Specialist 2 2026-03-24 03:51:03 +00:00
lior1976@gmail.com 3cd2facb7f Update prompt: Article Summarizer 2026-03-24 03:51:03 +00:00
beresasis@gmail.com 1e2d460583 Update prompt: Interview Preparation Coach 2026-03-24 03:51:02 +00:00
sinansonmez 6bb35a2494 Update prompt: Code Review Assistant 2026-03-24 03:51:01 +00:00
giorgiop 7ab16f4858 Update prompt: Virtual Doctor 2026-03-24 03:51:01 +00:00
gokbeyinac f14bb05f1f Remove prompt: Kickstart Prompt for UX & UI Design 2026-03-23 03:57:32 +00:00
mellowdrastic@gmail.com 0a1145fce7 Add prompt: Love Shop 2026-03-23 03:57:31 +00:00
paul-cine 749fd6caf5 Add prompt: Midjourney 2026-03-23 03:57:31 +00:00
tuanductran 8db94647df Add prompt: Astro.js 2026-03-23 03:57:31 +00:00
fede.gazzelloni@gmail.com 7bf5b07f60 Update prompt: Article Summarizer 2026-03-23 03:57:30 +00:00
debashis.sarker@gmail.com 31fefe12ac Update prompt: The Technical Co-Founder: Building Real Products Together 2026-03-23 03:57:30 +00:00
aymanrabeemac@gmail.com 05d3ea95da Update prompt: Code Review Specialist 2026-03-23 03:57:30 +00:00
nolanneff d7b1fb3e7a Update prompt: Code Review Specialist 2 2026-03-23 03:57:29 +00:00
ersinkoc eb97c5d393 Update prompt: Echoes of the Rust Age 2026-03-23 03:57:29 +00:00
cnwdy888@gmail.com 39c2bab09f Update prompt: Interview Preparation Coach 2026-03-23 03:57:28 +00:00
guangzhongzhang978@gmail.com 88c1115034 Update prompt: Virtual Doctor 2026-03-23 03:57:28 +00:00
akykaan ab6171d6c9 Update prompt: 3D City Prompt
Co-authored-by: panda667 <panda667@users.noreply.github.com>
2026-03-23 03:57:28 +00:00
f 19f9f6ca81 Update prompt: Code Review Assistant 2026-03-23 03:57:27 +00:00
devisasari aecd86b56b Update prompt: Astrologer 2026-03-23 03:57:27 +00:00
iuzn ed5ddb3d1f Update prompt: Prompt Generator 2026-03-23 03:57:27 +00:00
Fatih Kadir Akın f724bb7951 style(components/ads): update ezoic ad container styling 2026-03-22 18:27:51 +03:00
gokbeyinac 47f085b0ce Remove prompt: Kickstart Prompt for UX & UI Design 2026-03-22 03:52:31 +00:00
sametheredge85@gmail.com 024307a329 Add prompt: KJV Harmony Companion 2026-03-22 03:52:31 +00:00
c.burke0327@gmail.com d25abace00 Add prompt: Ultimate Stake.us Dice Strategy Builder — All Risk Levels & Bankrolls 2026-03-22 03:52:31 +00:00
tuanductran 84bc3cf9a9 Add prompt: Reflective Companion, Not Advice 2026-03-22 03:52:30 +00:00
gamaleldientarek@gmail.com 900da199cc Add prompt: Illustrator Style Describer Weavy 2026-03-22 03:52:30 +00:00
xiaoyucunx 7ce8778c7d Update prompt: Code Review Specialist 2026-03-22 03:52:30 +00:00
cperalesg@gmail.com 46abdcc528 Update prompt: Prompt Generator 2026-03-22 03:52:29 +00:00
panda667 af75cf7116 Update prompt: Astrologer 2026-03-22 03:52:29 +00:00
joembolinas 46b3d86dbb Update prompt: The Technical Co-Founder: Building Real Products Together 2026-03-22 03:52:29 +00:00
aitank2020@gmail.com 0b61819b2d Update prompt: Echoes of the Rust Age 2026-03-22 03:52:28 +00:00
dragoy18@gmail.com 21eede5c27 Update prompt: Code Review Specialist 2 2026-03-22 03:52:28 +00:00
lior1976@gmail.com 5d284ddb55 Update prompt: Article Summarizer 2026-03-22 03:52:27 +00:00
beresasis@gmail.com 9b3ea0bf7c Update prompt: Interview Preparation Coach 2026-03-22 03:52:27 +00:00
sinansonmez f89656b582 Update prompt: Code Review Assistant 2026-03-22 03:52:27 +00:00
giorgiop 7691c30bd5 Update prompt: Virtual Doctor 2026-03-22 03:52:26 +00:00
Fatih Kadir Akın 622b02bb80 Merge pull request #1094 from Goro2030/fix/docker-supervisord-socket 2026-03-21 21:40:23 +00:00
Mariano Silva 9156cece88 Fix Docker bootstrap: supervisord socket not configured
supervisord.conf was missing [unix_http_server], [supervisorctl], and
[rpcinterface:supervisor] sections, so the Unix socket was never created.
This caused the readiness check to always fail and the container to exit
with "Supervisord failed to start".

- Add missing supervisord socket and RPC configuration sections
- Improve bootstrap readiness check to verify both process and socket
- Add early exit if supervisord process dies unexpectedly
- Simplify supervisorctl calls (config path no longer needed)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-21 18:38:42 -03:00
yoloni 256e4339f5 fix: remove redundant non-null assertions in ezoic.ts
The ??= operator already guarantees that `ez` is non-null by the time
it is assigned, so the subsequent non-null assertions (!.) on `ez.cmd`
are redundant and can be safely removed.

Before:
  ez!.cmd = ez!.cmd || [];
  ez!.cmd.push(fn);

After:
  ez.cmd = ez.cmd || [];
  ez.cmd.push(fn);
2026-03-21 17:07:40 +08:00
gokbeyinac 08e85a3827 Remove prompt: Kickstart Prompt for UX & UI Design 2026-03-21 03:47:00 +00:00
mcyenerr@gmail.com 85969a537b Add prompt: Betting Prediction
Co-authored-by: devisasari <devisasari@users.noreply.github.com>
2026-03-21 03:46:59 +00:00
mmogdeveloper 0e8a742dd9 Add prompt: Stock 2026-03-21 03:46:59 +00:00
fede.gazzelloni@gmail.com e9b8d6c6a5 Update prompt: Article Summarizer 2026-03-21 03:46:59 +00:00
debashis.sarker@gmail.com c103d1d708 Update prompt: The Technical Co-Founder: Building Real Products Together 2026-03-21 03:46:58 +00:00
aymanrabeemac@gmail.com 279890f962 Update prompt: Code Review Specialist 2026-03-21 03:46:58 +00:00
nolanneff f4b1be8330 Update prompt: Code Review Specialist 2 2026-03-21 03:46:57 +00:00
ersinkoc f0f05357ca Update prompt: Echoes of the Rust Age 2026-03-21 03:46:57 +00:00
cnwdy888@gmail.com 2d6a628391 Update prompt: Interview Preparation Coach 2026-03-21 03:46:57 +00:00
guangzhongzhang978@gmail.com cfef0bfc4b Update prompt: Virtual Doctor 2026-03-21 03:46:56 +00:00
f 9943bbe4b7 Update prompt: Code Review Assistant 2026-03-21 03:46:56 +00:00
devisasari 4f26d270ed Update prompt: Astrologer 2026-03-21 03:46:55 +00:00
iuzn 6c66be57a6 Update prompt: Prompt Generator 2026-03-21 03:46:55 +00:00
wkaandemir 7bc643c889 Remove prompt: video-analysis-expert 2026-03-20 03:50:52 +00:00
wkaandemir b77c8ed13d Remove prompt: performance-engineer 2026-03-20 03:50:52 +00:00
wkaandemir 7e6d9ff4a2 Remove prompt: frontend-architect 2026-03-20 03:50:51 +00:00
wkaandemir d237a6a7f3 Remove prompt: security-engineer 2026-03-20 03:50:51 +00:00
wkaandemir ec63c8e3ff Remove prompt: root-cause-analyst 2026-03-20 03:50:51 +00:00
wkaandemir bc1960f1a5 Remove prompt: repo-indexer 2026-03-20 03:50:50 +00:00
wkaandemir b3b2a4a09c Remove prompt: refactoring-expert 2026-03-20 03:50:50 +00:00
wkaandemir 7f02c0fa8a Remove prompt: quality-engineer 2026-03-20 03:50:49 +00:00
wkaandemir 6d0b72ebd4 Remove prompt: devops-architect 2026-03-20 03:50:49 +00:00
wkaandemir 9972e8b2b4 Remove prompt: bug-risk-analysis 2026-03-20 03:50:49 +00:00
wkaandemir 22cef958c6 Remove prompt: deep-research-agent 2026-03-20 03:50:48 +00:00
winningt25-ux c234ed3f38 Add prompt: Grok customize 2026-03-20 03:50:48 +00:00
mmanisaligil 1c810f3e28 Add prompt: Business Risk & Scenario Analyzer 2026-03-20 03:50:47 +00:00
mmanisaligil 6043696ca7 Add prompt: Go-To-Market Execution Planner 2026-03-20 03:50:47 +00:00
mmanisaligil e7f81e24dc Add prompt: Revenue Model & Unit Economics Analyzer 2026-03-20 03:50:47 +00:00
mmanisaligil 28a2806d4b Add prompt: Market Entry Strategy Engine 2026-03-20 03:50:47 +00:00
mmanisaligil 9683bef22e Add prompt: Strategic Business Blueprint Generator 2026-03-20 03:50:46 +00:00
mmanisaligil 3e53eebcf4 Add prompt: High-Stakes Decision Support System 2026-03-20 03:50:46 +00:00
mmanisaligil b406431755 Add prompt: Legal Risk Minimization Tool for Freelancers 2026-03-20 03:50:46 +00:00
mmanisaligil caf297283c Add prompt: Zero to One Solo-Founder Launch System 2026-03-20 03:50:45 +00:00
mmanisaligil 9f7c200e69 Add prompt: Personal Knowledge & Narrative Tool 2026-03-20 03:50:45 +00:00
mmanisaligil 4f26d0e120 Add prompt: Trading & Investing Simulation Platform 2026-03-20 03:50:45 +00:00
mmanisaligil 039a4028a3 Add prompt: Private Group Coaching Infrastructure 2026-03-20 03:50:45 +00:00
mmanisaligil e11a167a55 Add prompt: Personalized Digital Avatar Generator 2026-03-20 03:50:44 +00:00
mmanisaligil 4639de7157 Add prompt: Dating Profile Optimization Suite 2026-03-20 03:50:44 +00:00
mmanisaligil 1462653763 Add prompt: AI-Powered Personal Compliment & Coaching Engine 2026-03-20 03:50:44 +00:00
mmanisaligil ebdabfefb4 Add prompt: Apple-Level UI System Designer (2026 Standard) 2026-03-20 03:50:43 +00:00
mmanisaligil 560dc17883 Add prompt: Design System Consistency Auditor 2026-03-20 03:50:43 +00:00
mmanisaligil ea715bc2b8 Add prompt: AI-First Design Handoff Generator (Dev-Ready Spec) 2026-03-20 03:50:43 +00:00
mmanisaligil 1189277f46 Add prompt: UX Conversion Deconstruction Engine 2026-03-20 03:50:42 +00:00
wkaandemir 73e017bb6f Add prompt: Visual Media Analysis Expert Agent Role 2026-03-20 03:50:42 +00:00
wkaandemir 11e6c3f440 Add prompt: Repository Indexer Agent Role 2026-03-20 03:50:42 +00:00
wkaandemir 50a97c0729 Add prompt: Deep Research Agent Role 2026-03-20 03:50:42 +00:00
wkaandemir b991170aec Add prompt: Bug Risk Analyst Agent Role 2026-03-20 03:50:41 +00:00
wkaandemir 6d1fbd3152 Add prompt: TypeScript Type Expert Agent Role 2026-03-20 03:50:41 +00:00
wkaandemir 07005ec619 Add prompt: Tool Evaluator Agent Role 2026-03-20 03:50:41 +00:00
wkaandemir 818ac2f32e Add prompt: Shell Script Agent Role 2026-03-20 03:50:40 +00:00
wkaandemir 246418367f Add prompt: Refactoring Expert Agent Role 2026-03-20 03:50:40 +00:00
wkaandemir 2b5ff2c672 Add prompt: Root Cause Analysis Agent Role 2026-03-20 03:50:40 +00:00
wkaandemir 1e032ed819 Add prompt: Rapid Prototyper Agent Role 2026-03-20 03:50:40 +00:00
wkaandemir a7112fa127 Add prompt: Product Planner Agent Role 2026-03-20 03:50:39 +00:00
wkaandemir b529c1b275 Add prompt: Post-Implementation Audit Agent Role 2026-03-20 03:50:39 +00:00
wkaandemir 345989463f Add prompt: Error Handler Agent Role 2026-03-20 03:50:39 +00:00
wkaandemir fbf2a69203 Add prompt: Dependency Manager Agent Role 2026-03-20 03:50:38 +00:00
wkaandemir b45918c4c3 Add prompt: Code Reviewer Agent Role 2026-03-20 03:50:38 +00:00
wkaandemir 60410ea046 Add prompt: Code Review Agent Role 2026-03-20 03:50:38 +00:00
wkaandemir 9db18e74b7 Add prompt: Code Formatter Agent Role 2026-03-20 03:50:38 +00:00
wkaandemir 954fbea6ba Add prompt: Test Engineer Agent Role 2026-03-20 03:50:37 +00:00
wkaandemir 402016da36 Add prompt: Test Analyzer Agent Role 2026-03-20 03:50:37 +00:00
wkaandemir 2fac69e1f7 Add prompt: Quality Engineering Agent Role 2026-03-20 03:50:37 +00:00
wkaandemir 05c32f93ab Add prompt: API Tester Agent Role 2026-03-20 03:50:37 +00:00
wkaandemir 0e8d8e2449 Add prompt: Vulnerability Auditor Agent Role 2026-03-20 03:50:36 +00:00
wkaandemir d55748d291 Add prompt: Diff Security Auditor Agent Role 2026-03-20 03:50:36 +00:00
wkaandemir 612114beaf Add prompt: Performance Tuning Agent Role 2026-03-20 03:50:36 +00:00
wkaandemir 6a1d232347 Add prompt: Optimization Auditor Agent Role 2026-03-20 03:50:35 +00:00
wkaandemir 437be3d61d Add prompt: Caching Architect Agent Role 2026-03-20 03:50:35 +00:00
wkaandemir 008698943a Add prompt: Legal Document Generator Agent Role 2026-03-20 03:50:35 +00:00
wkaandemir 62b5767bc9 Add prompt: UI Architect Agent Role 2026-03-20 03:50:35 +00:00
wkaandemir 8496265084 Add prompt: SEO Optimization Agent Role 2026-03-20 03:50:34 +00:00
wkaandemir a3ee86b65b Add prompt: SEO Auditor Agent Role 2026-03-20 03:50:34 +00:00
wkaandemir 2379887c93 Add prompt: Frontend Developer Agent Role 2026-03-20 03:50:34 +00:00
wkaandemir 1e029580c6 Add prompt: Accessibility Auditor Agent Role 2026-03-20 03:50:34 +00:00
wkaandemir e52826f731 Add prompt: Documentation Maintainer Agent Role 2026-03-20 03:50:33 +00:00
wkaandemir b428739a19 Add prompt: Repository Workflow Editor Agent Role 2026-03-20 03:50:33 +00:00
wkaandemir 867147829b Add prompt: Git Workflow Expert Agent Role 2026-03-20 03:50:33 +00:00
wkaandemir 42c6125e94 Add prompt: Environment Configuration Agent Role 2026-03-20 03:50:33 +00:00
wkaandemir 63b0b66739 Add prompt: DevOps Automator Agent Role 2026-03-20 03:50:32 +00:00
wkaandemir cfdb8726d8 Add prompt: Backup & Restore Agent Role 2026-03-20 03:50:32 +00:00
wkaandemir b04295fa90 Add prompt: Mock Data Generator Agent Role 2026-03-20 03:50:32 +00:00
wkaandemir 77799aadcc Add prompt: Data Validator Agent Role 2026-03-20 03:50:32 +00:00
wkaandemir f51e399dcb Add prompt: Database Architect Agent Role 2026-03-20 03:50:31 +00:00
wkaandemir 63b371b678 Add prompt: Backend Architect Agent Role 2026-03-20 03:50:31 +00:00
wkaandemir d26692fbf2 Add prompt: API Design Expert Agent Role 2026-03-20 03:50:31 +00:00
wkaandemir 0034dc39b5 Add prompt: System Architect Agent Role 2026-03-20 03:50:31 +00:00
jovemexausto 36e73e4ad2 Add prompt: Entropy peer reviews 2026-03-20 03:50:30 +00:00
xiaoyucunx 05ed853084 Update prompt: Code Review Specialist 2026-03-20 03:50:30 +00:00
cperalesg@gmail.com 59bf6f13fe Update prompt: Prompt Generator 2026-03-20 03:50:30 +00:00
panda667 dcc5c5cbbf Update prompt: Astrologer 2026-03-20 03:50:29 +00:00
joembolinas 1803c8e297 Update prompt: The Technical Co-Founder: Building Real Products Together 2026-03-20 03:50:29 +00:00
aitank2020@gmail.com 14f7cfadf8 Update prompt: Echoes of the Rust Age 2026-03-20 03:50:29 +00:00
dragoy18@gmail.com 1d93108df9 Update prompt: Code Review Specialist 2 2026-03-20 03:50:28 +00:00
lior1976@gmail.com cde0e0724c Update prompt: Article Summarizer 2026-03-20 03:50:28 +00:00
beresasis@gmail.com ee712a0c8c Update prompt: Interview Preparation Coach 2026-03-20 03:50:28 +00:00
sinansonmez 721da5e226 Update prompt: Code Review Assistant 2026-03-20 03:50:27 +00:00
giorgiop e3c658bd79 Update prompt: Virtual Doctor 2026-03-20 03:50:27 +00:00
Fatih Kadir Akın 3b49211aab refactor(components): update EzoicPlaceholder to optimize DOM handling 2026-03-20 01:40:06 +03:00
Fatih Kadir Akın b991f8fe10 feat(public/sponsors, src/app): add Vercel OSS dark mode sponsor logo 2026-03-20 01:35:41 +03:00
Fatih Kadir Akın 9fbeddf8f4 refactor(components): update Ezoic ad handling and scripts placement
Entire-Checkpoint: afbec17cde9f
2026-03-20 01:23:52 +03:00
Fatih Kadir Akın 252bcb5de3 refactor(components): refactor Ezoic ad and placeholder components
Entire-Checkpoint: afbec17cde9f
2026-03-20 01:12:46 +03:00
Fatih Kadir Akın 4ef6246284 feat(components): add EzoicAd component for displaying ads 2026-03-20 00:53:42 +03:00
Fatih Kadir Akın a253e6524a fix(api): resolve TypeScript _count type error in prompts.json route 2026-03-20 00:44:19 +03:00
Fatih Kadir Akın f34113302f refactor(components): update Ezoic ad rendering logic 2026-03-20 00:34:12 +03:00
Fatih Kadir Akın 1c287d3a0f Merge pull request #1086 from mksglu/fix/vercel-cost-optimization
perf: reduce Vercel costs with 12 targeted optimizations ($6.4K → $800-1.5K/mo)
2026-03-19 21:23:17 +00:00
Fatih Kadir Akın 29064d6ada refactor(ads): improve Ezoic ad rendering logic 2026-03-20 00:20:51 +03:00
Mert Koseoglu c95f80dd75 fix: ReDoS prevention + bound slugify fallback scan
- Validate elicitation keys match variable name format before regex construction
  (prevents ReDoS via user-controlled regex metacharacters — CWE-1333)
- Narrow slugify fallback to only prompts with slug=null, cap at 500 results
- Add TODO to backfill slug column so fallback can be removed

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 21:40:18 +03:00
Mert Koseoglu 0e9258c300 fix: parseBody uses byte-accurate size check and returns 413
- Track bytes with Buffer.byteLength instead of string code units
- Return 413 Payload Too Large instead of generic 500
- Custom PayloadTooLargeError class for handler discrimination

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 21:28:17 +03:00
Mert Koseoglu 08a9c26ed2 fix: address CodeRabbit review — backward compat + slugify fallback
- prompts.json: Always include `content` field alongside `contentPreview`
  (Raycast extension reads `item.content` — removing it breaks the extension)
- mcp.ts GetPromptRequestSchema: Add slugify(title) fallback for prompts
  without a stored slug (getPromptName() advertises slugified titles in
  prompts/list, so the resolver must handle them too)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 21:25:08 +03:00
Mert Koseoglu 1dbdb88717 perf: reduce Vercel costs — 12 optimizations across MCP endpoint, prompts.json, and infra
Addresses $6,478/month Vercel bill with 12 targeted fixes based on forensic
bill analysis and 7-expert review. See #1085 for full analysis.

MCP endpoint (src/pages/api/mcp.ts):
- Fix GetPromptRequestSchema P0 full table scan (findMany→findFirst)
- Remove all JSON pretty-printing (13 occurrences, ~30% payload reduction)
- Add Cache-Control headers to GET discovery endpoint
- Set tools.listChanged=false to prevent client polling
- Add 1MB body size limit to parseBody (DoS protection)
- Make elicitation opt-in via fill_variables param (saves 10s CPU/request)
- Fix timer leak in elicitation setTimeout
- Cap search content at 1,000 chars (contentPreview)
- Remove structuredFormat from search results
- Dynamic import for improve_prompt (reduces cold start)
- Optimize search_skills to return fileNames only

prompts.json:
- Add pagination (?page=&limit=) with backward compatibility
- Add ETag support for 304 Not-Modified responses
- Truncate content to 500-char preview by default

Infrastructure:
- Remove Sentry tunnelRoute (was proxying all browser events through edge)
- Add slug + composite database indexes for MCP query patterns

Closes #1085

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 21:04:34 +03:00
Fatih Kadir Akın cd1715e703 chore(env): update EZOIC_ENABLED to NEXT_PUBLIC_EZOIC_ENABLED in environment variables 2026-03-19 18:21:51 +03:00
Fatih Kadir Akın d9fe66299a feat(prompts): enable Ezoic ads based on environment variable 2026-03-19 18:11:52 +03:00
Fatih Kadir Akın e1741b528e feat(prompts): add Ezoic ad placeholder to prompt page 2026-03-19 17:38:11 +03:00
Fatih Kadir Akın 68bf2e9be8 chore(widgets): update maxCount to 20 in ezoicWidget 2026-03-19 17:30:41 +03:00
Fatih Kadir Akın 266ffe9b9e Merge pull request #1082 from ogzgl/fix/reduce-vercel-costs 2026-03-19 12:26:59 +00:00
Oğuz Gül a46ef57a60 fix: reduce vercel costs 2026-03-19 15:16:07 +03:00
Fatih Kadir Akın 6505f7601f fix(page.tsx): update JSON-LD serialization to escape special characters 2026-03-19 10:29:41 +03:00
Fatih Kadir Akın 9684a58dbc fix(seo): update structured data script to escape special characters 2026-03-19 10:28:58 +03:00
gokbeyinac f50c843cb7 Remove prompt: Kickstart Prompt for UX & UI Design 2026-03-19 03:54:46 +00:00
mal4thia@gmail.com 7f34e89107 Add prompt: Professional photo restoration expert 2026-03-19 03:54:46 +00:00
priyalvijay108@gmail.com 4315ccba98 Add prompt: Review the social media content 2026-03-19 03:54:46 +00:00
fede.gazzelloni@gmail.com 6759e17f1c Update prompt: Article Summarizer 2026-03-19 03:54:45 +00:00
debashis.sarker@gmail.com b1d591c946 Update prompt: The Technical Co-Founder: Building Real Products Together 2026-03-19 03:54:45 +00:00
aymanrabeemac@gmail.com fad9ea6a5d Update prompt: Code Review Specialist 2026-03-19 03:54:45 +00:00
nolanneff 5e5d20b705 Update prompt: Code Review Specialist 2 2026-03-19 03:54:44 +00:00
thanos0000@gmail.com fa5e180371 Update prompt: Question Quality Lab Game 2026-03-19 03:54:44 +00:00
ersinkoc ba3a120f6d Update prompt: Echoes of the Rust Age 2026-03-19 03:54:44 +00:00
cnwdy888@gmail.com 8c54e612ac Update prompt: Interview Preparation Coach 2026-03-19 03:54:43 +00:00
guangzhongzhang978@gmail.com 239119a12e Update prompt: Virtual Doctor 2026-03-19 03:54:43 +00:00
f 34e529cc70 Update prompt: Code Review Assistant 2026-03-19 03:54:42 +00:00
devisasari e2a494e39d Update prompt: Astrologer 2026-03-19 03:54:42 +00:00
iuzn cee1e2d521 Update prompt: Prompt Generator 2026-03-19 03:54:42 +00:00
173 changed files with 96076 additions and 9670 deletions
-84
View File
@@ -1,84 +0,0 @@
{
"hooks": {
"PostToolUse": [
{
"matcher": "Task",
"hooks": [
{
"type": "command",
"command": "entire hooks claude-code post-task"
}
]
},
{
"matcher": "TodoWrite",
"hooks": [
{
"type": "command",
"command": "entire hooks claude-code post-todo"
}
]
}
],
"PreToolUse": [
{
"matcher": "Task",
"hooks": [
{
"type": "command",
"command": "entire hooks claude-code pre-task"
}
]
}
],
"SessionEnd": [
{
"matcher": "",
"hooks": [
{
"type": "command",
"command": "entire hooks claude-code session-end"
}
]
}
],
"SessionStart": [
{
"matcher": "",
"hooks": [
{
"type": "command",
"command": "entire hooks claude-code session-start"
}
]
}
],
"Stop": [
{
"matcher": "",
"hooks": [
{
"type": "command",
"command": "entire hooks claude-code stop"
}
]
}
],
"UserPromptSubmit": [
{
"matcher": "",
"hooks": [
{
"type": "command",
"command": "entire hooks claude-code user-prompt-submit"
}
]
}
]
},
"permissions": {
"deny": [
"Read(./.entire/metadata/**)"
]
}
}
+5 -1
View File
@@ -10,6 +10,7 @@ dist
# Git
.git
.gitignore
.gitattributes
# IDE
.vscode
@@ -23,10 +24,11 @@ dist
.env.development.local
.env.test.local
.env.production.local
.env.sentry-build-plugin
# Docker
compose.yml
docker-compose*.yml
Dockerfile*
# Development files
.github
@@ -38,6 +40,8 @@ packages
# Test files
coverage
.nyc_output
vitest.config.ts
vitest.setup.ts
# OS files
.DS_Store
-4
View File
@@ -1,4 +0,0 @@
tmp/
settings.local.json
metadata/
logs/
-5
View File
@@ -1,5 +0,0 @@
{
"strategy": "manual-commit",
"enabled": true,
"telemetry": true
}
+48 -2
View File
@@ -66,5 +66,51 @@ CRON_SECRET="your-secret-key-here"
# SENTRY_AUTH_TOKEN=sentry-auth-token
# GOOGLE_ADSENSE_ACCOUNT=ca-pub-xxxxxxxxxxxxxxxx
# EZOIC_ENABLED=true
# EZOIC_SITE_DOMAIN=prompts.chat
# ==============================================================================
# SSO Authentication Configurations
#
# Why two generic providers (OIDC vs OAuth 2.0)?
# - "OIDC" (OpenID Connect) performs strict cryptographic validation on the
# ID Token (verifying 'aud' matching the client ID, 'iss' matching issuer, etc).
# Use this for standard providers like Google, Auth0, Okta, Keycloak.
# - "OAuth 2.0" bypasses strict OIDC validation. Use this for legacy or
# enterprise systems that do not return OIDC ID Tokens
# ==============================================================================
# Generic OIDC Config (Strict Validation)
# ⚠️ Ensure you add "oidc" to the `providers` array in your prompts.config.ts file
# Callback URL to whitelist: <your-domain>/api/auth/callback/oidc
# AUTH_OIDC_ID="dummy-oidc-client-id"
# AUTH_OIDC_SECRET="dummy-oidc-client-secret"
# AUTH_OIDC_ISSUER="https://oidc.example.com"
# AUTH_OIDC_WELLKNOWN="https://oidc.example.com/.well-known/openid-configuration"
# AUTH_OIDC_SCOPE="openid email profile"
# AUTH_OIDC_NAME="Company OIDC"
# Optional overrides (uncomment to use):
# AUTH_OIDC_LOGO="https://your-domain.com/oidc-logo.png" # Local path or full URL to button image
# AUTH_OIDC_AUTHORIZATION_URL="https://oidc.example.com/authorize"
# AUTH_OIDC_TOKEN_URL="https://oidc.example.com/token"
# AUTH_OIDC_USERINFO_URL="https://oidc.example.com/userinfo"
# AUTH_OIDC_JWKS_URL="https://oidc.example.com/jwks"
# AUTH_OIDC_TOKEN_AUTH_METHOD="client_secret_post" # Allowed values: "client_secret_basic", "client_secret_post", "none"
# AUTH_OIDC_ENABLE_PKCE="true" # PKCE is enabled by default. Set to "false" to disable.
# Generic OAuth 2.0 Config (Loose Validation)
# ⚠️ Ensure you add "oauth" to the `providers` array in your prompts.config.ts file
# Callback URL to whitelist: <your-domain>/api/auth/callback/oauth
# AUTH_OAUTH_ID="dummy-oauth-client-id"
# AUTH_OAUTH_SECRET="dummy-oauth-client-secret"
# AUTH_OAUTH_ISSUER="https://sso.example.com"
# AUTH_OAUTH_WELLKNOWN="https://sso.example.com/.well-known/openid-configuration"
# AUTH_OAUTH_SCOPE="email profile"
# AUTH_OAUTH_NAME="Company SSO"
# Optional overrides (uncomment to use):
# AUTH_OAUTH_LOGO="https://your-domain.com/sso-logo.png" # Local path or full URL to button image
# AUTH_OAUTH_AUTHORIZATION_URL="https://sso.example.com/authorize"
# AUTH_OAUTH_TOKEN_URL="https://sso.example.com/token"
# AUTH_OAUTH_USERINFO_URL="https://sso.example.com/userinfo"
# AUTH_OAUTH_JWKS_URL="https://sso.example.com/jwks"
# AUTH_OAUTH_TOKEN_AUTH_METHOD="client_secret_basic" # Allowed values: "client_secret_basic", "client_secret_post", "none"
# AUTH_OAUTH_ENABLE_PKCE="true" # PKCE is enabled by default. Set to "false" to disable.
+1 -4
View File
@@ -46,9 +46,6 @@ next-env.d.ts
/src/generated/prisma
/src/app/sponsors
# Cloudflare / OpenNext
.open-next/
.wrangler/
# Sentry Config File
.env.sentry-build-plugin
.env.docker
+211 -133
View File
@@ -1,45 +1,87 @@
# Docker Deployment Guide
Run your own prompts.chat instance with a single command.
Run your own prompts.chat instance using Docker Compose.
[`compose.yml`](/compose.yml) supports both the pre-built container image being fetched from ghcr.io, or being built locally.
## Quick Start
### To build locally
```bash
git clone https://github.com/f/prompts.chat.git
cd prompts.chat
docker compose up -d --build
```
Open http://localhost:4444 in your browser.
### Using a Pre-built Image
Simply remove the `--build` flag from the command:
```bash
git clone https://github.com/f/prompts.chat.git
cd prompts.chat
docker compose up -d
```
## Standalone (Bring Your Own Database)
If you already have a PostgreSQL instance, you can run just the app container:
Need a hosted PostgreSQL database? We recommend [Neon](https://get.neon.com/VqfnMo4) for serverless Postgres with connection pooling and database branching.
<div>
<p>Sponsored by</p>
<a href="https://get.neon.com/VqfnMo4">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/f/prompts.chat/main/public/sponsors/neon-dark.svg">
<source media="(prefers-color-scheme: light)" srcset="https://raw.githubusercontent.com/f/prompts.chat/main/public/sponsors/neon.svg">
<img width="250px" alt="Neon Logo fallback" src="https://raw.githubusercontent.com/f/prompts.chat/main/public/sponsors/neon-dark.svg">
</picture>
</a>
</div>
```bash
docker build -f docker/Dockerfile -t prompts.chat .
docker run -d \
--name prompts \
-p 4444:3000 \
-e DATABASE_URL="postgresql://user:pass@your-db-host:5432/prompts?schema=public" \
-e AUTH_SECRET="$(openssl rand -base64 32)" \
prompts.chat
```
Or if you simply want to use the pre-built image:
```bash
docker run -d \
--name prompts \
-p 4444:3000 \
-v prompts-data:/data \
ghcr.io/f/prompts.chat
-e DATABASE_URL="postgresql://user:pass@your-db-host:5432/prompts?schema=public" \
-e AUTH_SECRET="$(openssl rand -base64 32)" \
ghcr.io/f/prompts.chat:latest
```
**First run:** The container will clone the repository and build the app (~3-5 minutes).
**Subsequent runs:** Starts immediately using the cached build.
Open http://localhost:4444 in your browser.
## Custom Branding
Customize your instance with environment variables:
All branding is configured via `PCHAT_*` environment variables at runtime -- no rebuild needed.
```bash
docker run -d \
--name my-prompts \
-p 4444:3000 \
-v prompts-data:/data \
-e PCHAT_NAME="Acme Prompts" \
-e PCHAT_DESCRIPTION="Our team's AI prompt library" \
-e PCHAT_COLOR="#ff6600" \
-e PCHAT_AUTH_PROVIDERS="github,google" \
-e PCHAT_LOCALES="en,es,fr" \
ghcr.io/f/prompts.chat
```yaml
# compose.yml
services:
app:
environment:
# ... existing vars ...
PCHAT_NAME: "Acme Prompts"
PCHAT_DESCRIPTION: "Our team's AI prompt library"
PCHAT_COLOR: "#ff6600"
PCHAT_AUTH_PROVIDERS: "github,google"
PCHAT_LOCALES: "en,es,fr"
```
> **Note:** Branding is applied during the first build. To change branding later, delete the volume and re-run:
> ```bash
> docker rm -f my-prompts
> docker volume rm prompts-data
> docker run ... # with new env vars
> ```
Then restart: `docker compose up -d`
## Configuration Variables
@@ -95,103 +137,102 @@ All variables are prefixed with `PCHAT_` to avoid conflicts.
| Variable | Description | Default |
|----------|-------------|---------|
| `AUTH_SECRET` | Secret for authentication tokens | Auto-generated |
| `PORT` | Internal container port | `3000` |
| `DATABASE_URL` | PostgreSQL connection string | Internal DB |
| `AUTH_SECRET` | Secret for authentication tokens | Auto-generated (set explicitly for production) |
| `DATABASE_URL` | PostgreSQL connection string | Set in compose.yml |
| `DIRECT_URL` | Direct PostgreSQL URL (bypasses poolers) | Same as DATABASE_URL |
| `PORT` | Host port mapping | `4444` |
## Production Setup
For production, set `AUTH_SECRET` explicitly:
For production, always set `AUTH_SECRET` explicitly:
```bash
docker run -d \
--name prompts \
-p 4444:3000 \
-v prompts-data:/data \
-e AUTH_SECRET="$(openssl rand -base64 32)" \
-e PCHAT_NAME="My Company Prompts" \
ghcr.io/f/prompts.chat
# Generate a secret
export AUTH_SECRET=$(openssl rand -base64 32)
# Start with explicit secret
docker compose up -d
```
Or add it to a `.env` file next to `compose.yml`:
```env
AUTH_SECRET=your-secret-key-here
```
### With OAuth Providers
```bash
docker run -d \
--name prompts \
-p 4444:3000 \
-v prompts-data:/data \
-e AUTH_SECRET="your-secret-key" \
-e PCHAT_AUTH_PROVIDERS="github,google" \
-e AUTH_GITHUB_ID="your-github-client-id" \
-e AUTH_GITHUB_SECRET="your-github-client-secret" \
-e AUTH_GOOGLE_ID="your-google-client-id" \
-e AUTH_GOOGLE_SECRET="your-google-client-secret" \
ghcr.io/f/prompts.chat
```yaml
# compose.yml
services:
app:
environment:
# ... existing vars ...
PCHAT_AUTH_PROVIDERS: "github,google"
AUTH_GITHUB_ID: "your-github-client-id"
AUTH_GITHUB_SECRET: "your-github-client-secret"
AUTH_GOOGLE_ID: "your-google-client-id"
AUTH_GOOGLE_SECRET: "your-google-client-secret"
```
### With AI Features (OpenAI)
```yaml
# compose.yml
services:
app:
environment:
# ... existing vars ...
PCHAT_FEATURE_AI_SEARCH: "true"
OPENAI_API_KEY: "sk-..."
```
## Database Seeding
Seed the database with example prompts:
```bash
docker run -d \
--name prompts \
-p 4444:3000 \
-v prompts-data:/data \
-e PCHAT_FEATURE_AI_SEARCH="true" \
-e OPENAI_API_KEY="sk-..." \
ghcr.io/f/prompts.chat
docker compose exec app npx prisma db seed
```
## Custom Logo
Mount your logo file:
Mount your logo file into the app container:
```bash
docker run -d \
--name prompts \
-p 4444:3000 \
-v prompts-data:/data \
-v ./my-logo.svg:/data/app/public/logo.svg \
-e PCHAT_NAME="My App" \
ghcr.io/f/prompts.chat
```yaml
# compose.yml
services:
app:
volumes:
- ./my-logo.svg:/app/public/logo.svg
environment:
PCHAT_LOGO: "/logo.svg"
```
## Data Persistence
### All-in-One Image
Data is stored in `/data` inside the container:
- `/data/postgres` - PostgreSQL database files
Mount a volume to persist data:
```bash
docker run -d \
-v prompts-data:/data \
ghcr.io/f/prompts.chat
```
PostgreSQL data is stored in the `postgres_data` named volume and persists across container restarts, rebuilds, and image updates.
### Backup
```bash
# Backup database
docker exec prompts pg_dump -U prompts prompts > backup.sql
docker compose exec db pg_dump -U prompts prompts > backup.sql
# Restore database
docker exec -i prompts psql -U prompts prompts < backup.sql
docker compose exec -T db psql -U prompts prompts < backup.sql
```
## Building Locally
Build and run locally:
```bash
docker build -f docker/Dockerfile -t prompts.chat .
docker run -p 4444:3000 -v prompts-data:/data prompts.chat
docker compose build
docker compose up -d
```
## Health Check
The container includes a health check endpoint:
The app container includes a health check endpoint:
```bash
curl http://localhost:4444/api/health
@@ -211,88 +252,108 @@ Response:
### View Logs
```bash
# All logs
docker logs prompts
# All services
docker compose logs
# Follow logs
docker logs -f prompts
docker compose logs -f
# PostgreSQL logs (inside container)
docker exec prompts cat /var/log/supervisor/postgresql.log
# App logs only
docker compose logs app
# Next.js logs (inside container)
docker exec prompts cat /var/log/supervisor/nextjs.log
# Database logs only
docker compose logs db
```
### Database Access
```bash
# Connect to PostgreSQL
docker exec -it prompts psql -U prompts -d prompts
docker compose exec db psql -U prompts -d prompts
# Run SQL query
docker exec prompts psql -U prompts -d prompts -c "SELECT COUNT(*) FROM \"Prompt\""
# Run a query
docker compose exec db psql -U prompts -d prompts -c "SELECT COUNT(*) FROM \"Prompt\""
```
### Container Shell
```bash
docker exec -it prompts bash
docker compose exec app sh
docker compose exec db bash
```
### Common Issues
**Container won't start:**
- Check logs: `docker logs prompts`
- Ensure port 4444 is available: `lsof -i :4444`
**App container keeps restarting:**
- Check logs: `docker compose logs app`
- Database may not be ready yet -- the entrypoint retries for up to 60 seconds
**Database connection errors:**
- Wait for PostgreSQL to initialize (can take 30-60 seconds on first run)
- Check database logs: `docker exec prompts cat /var/log/supervisor/postgresql.log`
- Verify the `db` service is healthy: `docker compose ps`
- Check database logs: `docker compose logs db`
**Authentication issues:**
- Ensure `AUTH_SECRET` is set for production
- For OAuth, verify callback URLs are configured correctly
## Resource Requirements
Minimum:
- 1 CPU core
- 1GB RAM
- 2GB disk space
Recommended:
- 2 CPU cores
- 2GB RAM
- 10GB disk space
- Set `AUTH_SECRET` explicitly for production
- For OAuth, verify callback URLs match your domain
## Updating
```bash
# Pull latest image
docker pull ghcr.io/f/prompts.chat
# If using pre-built images
docker compose pull
docker compose up -d
# Stop and remove old container
docker stop prompts && docker rm prompts
# Start new container (data persists in volume)
docker run -d \
--name prompts \
-p 4444:3000 \
-v prompts-data:/data \
-e AUTH_SECRET="your-secret-key" \
ghcr.io/f/prompts.chat
# If building locally
git pull
docker compose build
docker compose up -d
```
## Security Considerations
Data persists in the `postgres_data` volume across updates.
1. **Always set AUTH_SECRET** in production
2. **Use HTTPS** - put a reverse proxy (nginx, Caddy, Traefik) in front
3. **Limit exposed ports** - only expose what's needed
4. **Regular updates** - pull the latest image regularly
5. **Backup data** - regularly backup the `/data` volume
## Migrating from the Old Single-Image Setup
## Example: Running Behind Nginx
If you were using the previous all-in-one Docker image:
```bash
# 1. Export your database from the old container
docker exec prompts pg_dump -U prompts prompts > backup.sql
# 2. Stop and remove the old container
docker stop prompts && docker rm prompts
# 3. Start the new compose setup
docker compose up -d
# 4. Import your data
docker compose exec -T db psql -U prompts prompts < backup.sql
```
## Resource Requirements
**Runtime** (after first build):
- 1 CPU core
- 1GB RAM
- 2GB disk space
**First-run build** (Next.js compilation on startup):
- 1 CPU core
- Higher memory required (OOM may occur with low limits)
- 2GB disk space
> ⚠️ If you see `Killed` followed by `exited with code 137` during first startup,
> your Docker container likely ran out of memory during the build step.
> Increasing Docker's memory allocation (e.g., ~4GB or more) can help resolve this.
> On Docker Desktop: Settings → Resources → Memory.
**Recommended for production:**
- 2 CPU cores
- 2GB RAM (runtime)
- 10GB disk space
## Running Behind a Reverse Proxy
### Nginx
```nginx
server {
@@ -316,6 +377,23 @@ server {
}
```
### Caddy
```caddyfile
prompts.example.com {
reverse_proxy localhost:4444
}
```
## Security Considerations
1. **Always set AUTH_SECRET** in production
2. **Use HTTPS** -- put a reverse proxy (Nginx, Caddy, Traefik) in front
3. **Change default database password** -- update `POSTGRES_PASSWORD` in compose.yml and the connection strings
4. **Limit exposed ports** -- only expose what's needed
5. **Regular updates** -- pull the latest image regularly
6. **Backup data** -- regularly backup the database
## License
MIT
+61
View File
@@ -0,0 +1,61 @@
# Governance
This document describes the governance model for prompts.chat.
## Overview
prompts.chat is an open-source project that welcomes contributions from anyone. The project operates with a small group of maintainers who are responsible for the overall direction, code review, and release process. We aim to grow this group over time and welcome new maintainers who demonstrate sustained, quality contributions.
## Roles
### Users
Anyone who uses prompts.chat, whether by browsing the website, self-hosting the platform, using the CLI, or integrating with the MCP server. Users are encouraged to file issues, suggest features, and contribute prompts.
### Contributors
Anyone who contributes to the project. This includes submitting prompts through the web platform, opening pull requests, reporting bugs, improving documentation, or helping other users. All contributors are listed at https://github.com/f/prompts.chat/graphs/contributors.
### Maintainers
People with commit access to the repository. Maintainers review and merge pull requests, triage issues, and participate in project decisions. The current list of maintainers is in [OWNERS.md](OWNERS.md).
Maintainers are expected to:
- Review pull requests in a timely manner
- Help triage and respond to issues
- Follow the project's code of conduct
- Participate in governance discussions when they arise
### Project Lead
The project lead has final decision-making authority on project direction, releases, and governance changes. The project lead is responsible for ensuring the project stays aligned with its mission and the broader community's needs.
## Becoming a Maintainer
New maintainers are added based on sustained, high-quality contributions and demonstrated understanding of the project. There is no fixed checklist, but the following signals are considered:
- A track record of accepted pull requests over several months
- Thoughtful code reviews on other people's contributions
- Constructive participation in issue discussions
- Reliability and follow-through on commitments
Any existing maintainer can nominate a contributor for maintainer status. The nomination is discussed among the current maintainers, and the project lead makes the final decision. We are actively looking to grow the maintainer team, especially from contributors at different organizations.
## Decision Making
Most day-to-day decisions (bug fixes, small features, documentation updates) are made through the standard pull request review process. Any maintainer can approve and merge a PR.
For larger decisions (new features with broad impact, architectural changes, governance changes, dependency additions), we use a "lazy consensus" approach:
1. A proposal is opened as a GitHub issue or discussion.
2. The proposal is left open for at least 7 days to allow feedback.
3. If there are no objections from maintainers, the proposal is accepted.
4. If there are objections, the maintainers discuss and try to reach agreement. The project lead has final say if consensus cannot be reached.
## Changing This Document
Changes to this governance document follow the same decision-making process described above. Any maintainer or contributor can propose changes by opening a pull request.
## Code of Conduct
All participants in the project are expected to be respectful, constructive, and welcoming. We do not tolerate harassment, discrimination, or abusive behavior in any form. Violations can be reported to the project lead or through the channels listed in [SECURITY.md](SECURITY.md).
+11 -118
View File
@@ -1,121 +1,14 @@
Creative Commons Legal Code
This project uses a dual-license model:
CC0 1.0 Universal
- **Source code and site-authored content** (everything under src/,
prisma/, scripts/, and all configuration/build files) is licensed under
the MIT License. This includes the interactive book content in
src/content/book/.
See LICENSE-MIT for the full text.
CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE
LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN
ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS
INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES
REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS
PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM
THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED
HEREUNDER.
- **Prompt content and data** (prompts.csv, PROMPTS.md, and all user-submitted
prompt text) is dedicated to the public domain under CC0 1.0 Universal.
See LICENSE-CC0 for the full text.
Statement of Purpose
The laws of most jurisdictions throughout the world automatically confer
exclusive Copyright and Related Rights (defined below) upon the creator
and subsequent owner(s) (each and all, an "owner") of an original work of
authorship and/or a database (each, a "Work").
Certain owners wish to permanently relinquish those rights to a Work for
the purpose of contributing to a commons of creative, cultural and
scientific works ("Commons") that the public can reliably and without fear
of later claims of infringement build upon, modify, incorporate in other
works, reuse and redistribute as freely as possible in any form whatsoever
and for any purposes, including without limitation commercial purposes.
These owners may contribute to the Commons to promote the ideal of a free
culture and the further production of creative, cultural and scientific
works, or to gain reputation or greater distribution for their Work in
part through the use and efforts of others.
For these and/or other purposes and motivations, and without any
expectation of additional consideration or compensation, the person
associating CC0 with a Work (the "Affirmer"), to the extent that he or she
is an owner of Copyright and Related Rights in the Work, voluntarily
elects to apply CC0 to the Work and publicly distribute the Work under its
terms, with knowledge of his or her Copyright and Related Rights in the
Work and the meaning and intended legal effect of CC0 on those rights.
1. Copyright and Related Rights. A Work made available under CC0 may be
protected by copyright and related or neighboring rights ("Copyright and
Related Rights"). Copyright and Related Rights include, but are not
limited to, the following:
i. the right to reproduce, adapt, distribute, perform, display,
communicate, and translate a Work;
ii. moral rights retained by the original author(s) and/or performer(s);
iii. publicity and privacy rights pertaining to a person's image or
likeness depicted in a Work;
iv. rights protecting against unfair competition in regards to a Work,
subject to the limitations in paragraph 4(a), below;
v. rights protecting the extraction, dissemination, use and reuse of data
in a Work;
vi. database rights (such as those arising under Directive 96/9/EC of the
European Parliament and of the Council of 11 March 1996 on the legal
protection of databases, and under any national implementation
thereof, including any amended or successor version of such
directive); and
vii. other similar, equivalent or corresponding rights throughout the
world based on applicable law or treaty, and any national
implementations thereof.
2. Waiver. To the greatest extent permitted by, but not in contravention
of, applicable law, Affirmer hereby overtly, fully, permanently,
irrevocably and unconditionally waives, abandons, and surrenders all of
Affirmer's Copyright and Related Rights and associated claims and causes
of action, whether now known or unknown (including existing as well as
future claims and causes of action), in the Work (i) in all territories
worldwide, (ii) for the maximum duration provided by applicable law or
treaty (including future time extensions), (iii) in any current or future
medium and for any number of copies, and (iv) for any purpose whatsoever,
including without limitation commercial, advertising or promotional
purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each
member of the public at large and to the detriment of Affirmer's heirs and
successors, fully intending that such Waiver shall not be subject to
revocation, rescission, cancellation, termination, or any other legal or
equitable action to disrupt the quiet enjoyment of the Work by the public
as contemplated by Affirmer's express Statement of Purpose.
3. Public License Fallback. Should any part of the Waiver for any reason
be judged legally invalid or ineffective under applicable law, then the
Waiver shall be preserved to the maximum extent permitted taking into
account Affirmer's express Statement of Purpose. In addition, to the
extent the Waiver is so judged Affirmer hereby grants to each affected
person a royalty-free, non transferable, non sublicensable, non exclusive,
irrevocable and unconditional license to exercise Affirmer's Copyright and
Related Rights in the Work (i) in all territories worldwide, (ii) for the
maximum duration provided by applicable law or treaty (including future
time extensions), (iii) in any current or future medium and for any number
of copies, and (iv) for any purpose whatsoever, including without
limitation commercial, advertising or promotional purposes (the
"License"). The License shall be deemed effective as of the date CC0 was
applied by Affirmer to the Work. Should any part of the License for any
reason be judged legally invalid or ineffective under applicable law, such
partial invalidity or ineffectiveness shall not invalidate the remainder
of the License, and in such case Affirmer hereby affirms that he or she
will not (i) exercise any of his or her remaining Copyright and Related
Rights in the Work or (ii) assert any associated claims and causes of
action with respect to the Work, in either case contrary to Affirmer's
express Statement of Purpose.
4. Limitations and Disclaimers.
a. No trademark or patent rights held by Affirmer are waived, abandoned,
surrendered, licensed or otherwise affected by this document.
b. Affirmer offers the Work as-is and makes no representations or
warranties of any kind concerning the Work, express, implied,
statutory or otherwise, including without limitation warranties of
title, merchantability, fitness for a particular purpose, non
infringement, or the absence of latent or other defects, accuracy, or
the present or absence of errors, whether or not discoverable, all to
the greatest extent permissible under applicable law.
c. Affirmer disclaims responsibility for clearing rights of other persons
that may apply to the Work or any use thereof, including without
limitation any person's Copyright and Related Rights in the Work.
Further, Affirmer disclaims responsibility for obtaining any necessary
consents, permissions or other rights required for any use of the
Work.
d. Affirmer understands and acknowledges that Creative Commons is not a
party to this document and has no duty or obligation with respect to
this CC0 or use of the Work.
If you are unsure which license applies to a particular file, the MIT License
applies by default.
+121
View File
@@ -0,0 +1,121 @@
Creative Commons Legal Code
CC0 1.0 Universal
CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE
LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN
ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS
INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES
REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS
PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM
THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED
HEREUNDER.
Statement of Purpose
The laws of most jurisdictions throughout the world automatically confer
exclusive Copyright and Related Rights (defined below) upon the creator
and subsequent owner(s) (each and all, an "owner") of an original work of
authorship and/or a database (each, a "Work").
Certain owners wish to permanently relinquish those rights to a Work for
the purpose of contributing to a commons of creative, cultural and
scientific works ("Commons") that the public can reliably and without fear
of later claims of infringement build upon, modify, incorporate in other
works, reuse and redistribute as freely as possible in any form whatsoever
and for any purposes, including without limitation commercial purposes.
These owners may contribute to the Commons to promote the ideal of a free
culture and the further production of creative, cultural and scientific
works, or to gain reputation or greater distribution for their Work in
part through the use and efforts of others.
For these and/or other purposes and motivations, and without any
expectation of additional consideration or compensation, the person
associating CC0 with a Work (the "Affirmer"), to the extent that he or she
is an owner of Copyright and Related Rights in the Work, voluntarily
elects to apply CC0 to the Work and publicly distribute the Work under its
terms, with knowledge of his or her Copyright and Related Rights in the
Work and the meaning and intended legal effect of CC0 on those rights.
1. Copyright and Related Rights. A Work made available under CC0 may be
protected by copyright and related or neighboring rights ("Copyright and
Related Rights"). Copyright and Related Rights include, but are not
limited to, the following:
i. the right to reproduce, adapt, distribute, perform, display,
communicate, and translate a Work;
ii. moral rights retained by the original author(s) and/or performer(s);
iii. publicity and privacy rights pertaining to a person's image or
likeness depicted in a Work;
iv. rights protecting against unfair competition in regards to a Work,
subject to the limitations in paragraph 4(a), below;
v. rights protecting the extraction, dissemination, use and reuse of data
in a Work;
vi. database rights (such as those arising under Directive 96/9/EC of the
European Parliament and of the Council of 11 March 1996 on the legal
protection of databases, and under any national implementation
thereof, including any amended or successor version of such
directive); and
vii. other similar, equivalent or corresponding rights throughout the
world based on applicable law or treaty, and any national
implementations thereof.
2. Waiver. To the greatest extent permitted by, but not in contravention
of, applicable law, Affirmer hereby overtly, fully, permanently,
irrevocably and unconditionally waives, abandons, and surrenders all of
Affirmer's Copyright and Related Rights and associated claims and causes
of action, whether now known or unknown (including existing as well as
future claims and causes of action), in the Work (i) in all territories
worldwide, (ii) for the maximum duration provided by applicable law or
treaty (including future time extensions), (iii) in any current or future
medium and for any number of copies, and (iv) for any purpose whatsoever,
including without limitation commercial, advertising or promotional
purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each
member of the public at large and to the detriment of Affirmer's heirs and
successors, fully intending that such Waiver shall not be subject to
revocation, rescission, cancellation, termination, or any other legal or
equitable action to disrupt the quiet enjoyment of the Work by the public
as contemplated by Affirmer's express Statement of Purpose.
3. Public License Fallback. Should any part of the Waiver for any reason
be judged legally invalid or ineffective under applicable law, then the
Waiver shall be preserved to the maximum extent permitted taking into
account Affirmer's express Statement of Purpose. In addition, to the
extent the Waiver is so judged Affirmer hereby grants to each affected
person a royalty-free, non transferable, non sublicensable, non exclusive,
irrevocable and unconditional license to exercise Affirmer's Copyright and
Related Rights in the Work (i) in all territories worldwide, (ii) for the
maximum duration provided by applicable law or treaty (including future
time extensions), (iii) in any current or future medium and for any number
of copies, and (iv) for any purpose whatsoever, including without
limitation commercial, advertising or promotional purposes (the
"License"). The License shall be deemed effective as of the date CC0 was
applied by Affirmer to the Work. Should any part of the License for any
reason be judged legally invalid or ineffective under applicable law, such
partial invalidity or ineffectiveness shall not invalidate the remainder
of the License, and in such case Affirmer hereby affirms that he or she
will not (i) exercise any of his or her remaining Copyright and Related
Rights in the Work or (ii) assert any associated claims and causes of
action with respect to the Work, in either case contrary to Affirmer's
express Statement of Purpose.
4. Limitations and Disclaimers.
a. No trademark or patent rights held by Affirmer are waived, abandoned,
surrendered, licensed or otherwise affected by this document.
b. Affirmer offers the Work as-is and makes no representations or
warranties of any kind concerning the Work, express, implied,
statutory or otherwise, including without limitation warranties of
title, merchantability, fitness for a particular purpose, non
infringement, or the absence of latent or other defects, accuracy, or
the present or absence of errors, whether or not discoverable, all to
the greatest extent permissible under applicable law.
c. Affirmer disclaims responsibility for clearing rights of other persons
that may apply to the Work or any use thereof, including without
limitation any person's Copyright and Related Rights in the Work.
Further, Affirmer disclaims responsibility for obtaining any necessary
consents, permissions or other rights required for any use of the
Work.
d. Affirmer understands and acknowledges that Creative Commons is not a
party to this document and has no duty or obligation with respect to
this CC0 or use of the Work.
+21
View File
@@ -0,0 +1,21 @@
MIT License
Copyright (c) 2022-present Fatih Kadir Akin and contributors
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
+23
View File
@@ -0,0 +1,23 @@
# Owners
This file lists the current maintainers and emeritus maintainers of prompts.chat.
## Project Lead
| Name | GitHub | Affiliation |
|------|--------|-------------|
| Fatih Kadir Akin | [@f](https://github.com/f) | Independent |
## Maintainers
| Name | GitHub | Affiliation | Since |
|------|--------|-------------|-------|
| Fatih Kadir Akin | [@f](https://github.com/f) | Independent | Dec 2022 |
## Emeritus Maintainers
None yet.
---
We are actively looking to grow the maintainer team. If you are interested in becoming a maintainer, please see [GOVERNANCE.md](GOVERNANCE.md) for how the process works. Sustained contributions and involvement in code review are the best way to get started.
+44709 -1560
View File
File diff suppressed because it is too large Load Diff
+37 -10
View File
@@ -34,12 +34,12 @@
<p align="center">
<sub>
🏆 Featured in <a href="https://www.forbes.com/sites/tjmccue/2023/01/19/chatgpt-success-completely-depends-on-your-prompt/">Forbes</a> ·
🎓 Referenced by <a href="https://www.huit.harvard.edu/news/ai-prompts">Harvard</a>, <a href="https://etc.cuit.columbia.edu/news/columbia-prompt-library-effective-academic-ai-use">Columbia</a> ·
📄 <a href="https://scholar.google.com/citations?user=AZ0Dg8YAAAAJ&hl=en">40+ academic citations</a> ·
🏆 Featured in <a href="https://www.forbes.com/sites/tjmccue/2023/01/19/chatgpt-success-completely-depends-on-your-prompt/">Forbes</a> ·
🎓 Referenced by <a href="https://www.huit.harvard.edu/news/ai-prompts">Harvard</a>, <a href="https://etc.cuit.columbia.edu/news/columbia-prompt-library-effective-academic-ai-use">Columbia</a> ·
📄 <a href="https://scholar.google.com/citations?user=AZ0Dg8YAAAAJ&hl=en">40+ academic citations</a> ·
❤️ <a href="https://huggingface.co/datasets/fka/prompts.chat">Most liked dataset</a> on Hugging Face<br>
⭐ 143k+ GitHub stars ·
🏅 <a href="https://spotlights-feed.github.com/spotlights/prompts-chat/index/">GitHub Staff Pick</a> ·
⭐ 143k+ GitHub stars ·
🏅 <a href="https://spotlights-feed.github.com/spotlights/prompts-chat/index/">GitHub Staff Pick</a> ·
🚀 First prompt library (Dec 2022)
</sub>
</p>
@@ -47,9 +47,9 @@
<p align="center">
<sub><strong>Loved by AI pioneers:</strong></sub><br>
<sub>
<a href="https://x.com/gdb/status/1602072566671110144"><strong>Greg Brockman</strong></a> (OpenAI Co-Founder) ·
<a href="https://x.com/woj_zaremba/status/1601362952841760769"><strong>Wojciech Zaremba</strong></a> (OpenAI Co-Founder) ·
<a href="https://x.com/clementdelangue/status/1830976369389642059"><strong>Clement Delangue</strong></a> (Hugging Face CEO) ·
<a href="https://x.com/gdb/status/1602072566671110144"><strong>Greg Brockman</strong></a> (OpenAI Co-Founder) ·
<a href="https://x.com/woj_zaremba/status/1601362952841760769"><strong>Wojciech Zaremba</strong></a> (OpenAI Co-Founder) ·
<a href="https://x.com/clementdelangue/status/1830976369389642059"><strong>Clement Delangue</strong></a> (Hugging Face CEO) ·
<a href="https://x.com/ashtom/status/1887250944427237816"><strong>Thomas Dohmke</strong></a> (Former GitHub CEO)
</sub>
</p>
@@ -73,7 +73,7 @@ A curated collection of **prompt examples** for AI chat models. Originally creat
Learn prompt engineering with our **free, interactive guide** — 25+ chapters covering everything from basics to advanced techniques like chain-of-thought reasoning, few-shot learning, and AI agents.
**[Start Reading →](https://fka.gumroad.com/l/art-of-chatgpt-prompting)**
**[Start Reading →](https://fka.gumroad.com/l/art-of-chatgpt-prompting)** (Source: https://github.com/f/prompts.chat/tree/main/src/content/book)
---
@@ -116,6 +116,19 @@ npm install && npm run setup
The setup wizard configures branding, theme, authentication (GitHub/Google/Azure AD), and features.
**Recommended database:** prompts.chat uses PostgreSQL. For a hosted database, we recommend [Neon](https://get.neon.com/VqfnMo4).
<div>
<p>Sponsored by</p>
<a href="https://get.neon.com/VqfnMo4">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/f/prompts.chat/main/public/sponsors/neon-dark.svg">
<source media="(prefers-color-scheme: light)" srcset="https://raw.githubusercontent.com/f/prompts.chat/main/public/sponsors/neon.svg">
<img width="250px" alt="Neon Logo fallback" src="https://raw.githubusercontent.com/f/prompts.chat/main/public/sponsors/neon-dark.svg">
</picture>
</a>
</div>
📖 **[Full Self-Hosting Guide](SELF-HOSTING.md)** • 🐳 **[Docker Guide](DOCKER.md)**
---
@@ -167,6 +180,14 @@ Use prompts.chat as an MCP server in your AI tools.
## 💖 Sponsors
<p align="center">
<!-- Neon (py-1) -->
<a href="https://get.neon.com/VqfnMo4">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/f/prompts.chat/main/public/sponsors/neon-dark.svg">
<source media="(prefers-color-scheme: light)" srcset="https://raw.githubusercontent.com/f/prompts.chat/main/public/sponsors/neon.svg">
<img height="30" alt="Neon" src="https://raw.githubusercontent.com/f/prompts.chat/main/public/sponsors/neon.svg">
</picture>
</a>&nbsp;&nbsp;
<!-- Clemta -->
<a href="https://clemta.com/?utm_source=prompts.chat">
<picture>
@@ -238,4 +259,10 @@ Use prompts.chat as an MCP server in your AI tools.
## 📜 License
**[CC0 1.0 Universal (Public Domain)](https://creativecommons.org/publicdomain/zero/1.0/)** — Copy, modify, distribute, and use freely. No attribution required.
This project is dual-licensed:
- **Source code and site-authored content** is licensed under the [MIT License](LICENSE-MIT),
including the interactive book content in [`src/content/book`](src/content/book).
- **Prompt content and data** (prompts.csv, PROMPTS.md, user-submitted prompts) is dedicated to the public domain under [CC0 1.0 Universal](LICENSE-CC0).
See [LICENSE](LICENSE) for details.
+47
View File
@@ -0,0 +1,47 @@
# Security Policy
## Supported Versions
| Version | Supported |
|---------|-----------|
| Latest | Yes |
## Reporting a Vulnerability
If you discover a security vulnerability in prompts.chat, please report it responsibly.
**Do NOT open a public GitHub issue for security vulnerabilities.**
Instead, please report vulnerabilities by emailing **security@prompts.chat**.
Include the following in your report:
- Description of the vulnerability
- Steps to reproduce
- Potential impact
- Suggested fix (if any)
## CVE Coordination
We coordinate the CVE identification and disclosure process with the GitHub Security team. Confirmed
vulnerabilities will be tracked through GitHub Security Advisories, and CVE IDs will be requested
and assigned as appropriate.
## Scope
The following are **out of scope**:
- Denial of service attacks
- Social engineering
- Issues in third-party dependencies (report these upstream)
- Attacks requiring physical access
## Disclosure Policy
We ask that you give us reasonable time to address the issue before any public disclosure. We are
committed to working with security researchers and will credit reporters (unless anonymity is
preferred) once the issue is resolved.
## Thank You
We appreciate the security research community's efforts in helping keep prompts.chat and its users
safe.
+17 -2
View File
@@ -32,9 +32,24 @@ This guide explains how to deploy **prompts.chat** on your own private server fo
## Prerequisites
- **Node.js** 18+
- **Node.js** 24.x
- **PostgreSQL** database
- **npm** or **yarn**
- **npm**
## Recommended Database
prompts.chat requires PostgreSQL. For a hosted PostgreSQL database, we recommend [Neon](https://get.neon.com/VqfnMo4): it provides serverless Postgres, connection pooling, and branching that work well for self-hosted prompts.chat deployments.
<div>
<p>Sponsored by</p>
<a href="https://get.neon.com/VqfnMo4">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/f/prompts.chat/main/public/sponsors/neon-dark.svg">
<source media="(prefers-color-scheme: light)" srcset="https://raw.githubusercontent.com/f/prompts.chat/main/public/sponsors/neon.svg">
<img width="250px" alt="Neon Logo fallback" src="https://raw.githubusercontent.com/f/prompts.chat/main/public/sponsors/neon-dark.svg">
</picture>
</a>
</div>
## Environment Variables
+45
View File
@@ -0,0 +1,45 @@
services:
db:
image: postgres:17-bookworm
restart: unless-stopped
environment:
POSTGRES_USER: prompts
# Change this for production — see Security Considerations in DOCKER.md
POSTGRES_PASSWORD: "${POSTGRES_PASSWORD:-prompts}"
POSTGRES_DB: prompts
volumes:
- postgres_data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U prompts -d prompts"]
interval: 5s
timeout: 5s
retries: 10
start_period: 10s
app:
image: ghcr.io/f/prompts.chat:latest
# By default, uses the pre-built image above. To build locally instead,
# run: docker compose up -d --build
build:
context: .
dockerfile: docker/Dockerfile
restart: unless-stopped
ports:
- "${PORT:-4444}:3000"
environment:
DATABASE_URL: "postgresql://prompts:${POSTGRES_PASSWORD:-prompts}@db:5432/prompts?schema=public"
DIRECT_URL: "postgresql://prompts:${POSTGRES_PASSWORD:-prompts}@db:5432/prompts?schema=public"
AUTH_SECRET: "${AUTH_SECRET:-}"
NODE_ENV: production
# Branding (all optional — set any PCHAT_* variable to customize at runtime)
# PCHAT_NAME: "My Prompt Library"
# PCHAT_DESCRIPTION: "Our team's AI prompt collection"
# PCHAT_COLOR: "#6366f1"
# PCHAT_AUTH_PROVIDERS: "credentials"
# PCHAT_LOCALES: "en"
depends_on:
db:
condition: service_healthy
volumes:
postgres_data:
+73 -28
View File
@@ -1,49 +1,94 @@
# prompts.chat Bootstrap Docker Image
# Lightweight image that clones and builds on first run
# prompts.chat Docker Image
# Multi-stage build for a production-ready Next.js application
#
# Usage:
# docker run -p 4444:3000 -v prompts-data:/data ghcr.io/f/prompts.chat
# docker run -p 4444:3000 -v prompts-data:/data -e PCHAT_NAME="My App" ghcr.io/f/prompts.chat
# Usage with Docker Compose:
# docker compose up -d
#
# Usage standalone (bring your own PostgreSQL):
# docker build -f docker/Dockerfile -t prompts.chat .
# docker run -p 4444:3000 -e DATABASE_URL="postgresql://..." prompts.chat
FROM node:24-bookworm-slim
# ---- Stage 1: Base ----
FROM node:24-bookworm-slim AS base
RUN apt-get update && apt-get install -y --no-install-recommends \
openssl \
curl \
ca-certificates \
&& rm -rf /var/lib/apt/lists/*
WORKDIR /app
# ---- Stage 2: Dependencies ----
FROM base AS deps
# Copy dependency manifests and Prisma schema (postinstall runs prisma generate)
COPY package.json package-lock.json ./
COPY prisma/schema.prisma prisma/schema.prisma
COPY prisma.config.ts tsconfig.json ./
# Dummy DATABASE_URL for prisma generate (no actual connection is made)
ENV DATABASE_URL="postgresql://dummy:dummy@localhost:5432/dummy"
RUN npm ci
# ---- Stage 3: Builder ----
FROM base AS builder
COPY --from=deps /app/node_modules ./node_modules
COPY . .
ENV NEXT_TELEMETRY_DISABLED=1
ENV DATABASE_URL="postgresql://dummy:dummy@localhost:5432/dummy"
RUN npm run build
# ---- Stage 4: Runner ----
FROM node:24-bookworm-slim AS runner
LABEL org.opencontainers.image.source="https://github.com/f/prompts.chat"
LABEL org.opencontainers.image.description="prompts.chat - Self-hosted AI prompt library"
LABEL org.opencontainers.image.licenses="MIT"
# Install PostgreSQL, git, and utilities
RUN apt-get update && apt-get install -y --no-install-recommends \
postgresql-15 \
postgresql-contrib-15 \
supervisor \
git \
curl \
openssl \
curl \
ca-certificates \
&& rm -rf /var/lib/apt/lists/* \
&& mkdir -p /var/run/postgresql /var/log/supervisor \
&& chown -R postgres:postgres /var/run/postgresql
&& rm -rf /var/lib/apt/lists/*
# Create directories
WORKDIR /app
RUN mkdir -p /data/postgres /data/app && chown -R postgres:postgres /data/postgres
# Copy bootstrap scripts
COPY docker/bootstrap.sh /bootstrap.sh
COPY docker/supervisord.conf /etc/supervisor/conf.d/supervisord.conf
RUN chmod +x /bootstrap.sh
RUN groupadd --system --gid 1001 nodejs && \
useradd --system --uid 1001 --gid nodejs nextjs
# Copy standalone build output
COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./
COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static
COPY --from=builder --chown=nextjs:nodejs /app/public ./public
# Copy Prisma schema, migrations, and config for runtime migrations
COPY --from=builder --chown=nextjs:nodejs /app/prisma ./prisma
COPY --from=builder --chown=nextjs:nodejs /app/prisma.config.ts ./prisma.config.ts
COPY --from=builder --chown=nextjs:nodejs /app/package.json ./package.json
COPY --from=builder --chown=nextjs:nodejs /app/tsconfig.json ./tsconfig.json
# Install only Prisma CLI and its dependencies for runtime migrations
RUN npm install --no-save prisma@6.19 dotenv
# Copy entrypoint script
COPY --chown=nextjs:nodejs docker/entrypoint.sh ./entrypoint.sh
RUN chmod +x ./entrypoint.sh
# Environment defaults
ENV NODE_ENV=production
ENV PORT=3000
ENV HOSTNAME="0.0.0.0"
ENV DATABASE_URL="postgresql://prompts:prompts@localhost:5432/prompts?schema=public"
ENV DIRECT_URL="postgresql://prompts:prompts@localhost:5432/prompts?schema=public"
ENV REPO_URL="https://github.com/f/prompts.chat.git"
ENV HOSTNAME=0.0.0.0
ENV NEXT_TELEMETRY_DISABLED=1
EXPOSE 3000
HEALTHCHECK --interval=30s --timeout=10s --start-period=180s --retries=3 \
HEALTHCHECK --interval=30s --timeout=10s --start-period=30s --retries=3 \
CMD curl -f http://localhost:3000/api/health || exit 1
ENTRYPOINT ["/bootstrap.sh"]
USER nextjs
ENTRYPOINT ["./entrypoint.sh"]
-177
View File
@@ -1,177 +0,0 @@
#!/bin/bash
set -e
echo ""
echo "╔═══════════════════════════════════════════════════════════════╗"
echo "║ ║"
echo "║ 🚀 prompts.chat - AI Prompt Library ║"
echo "║ ║"
echo "╚═══════════════════════════════════════════════════════════════╝"
echo ""
# Paths
APP_DIR="/data/app"
PGDATA="/data/postgres"
PGBIN="/usr/lib/postgresql/15/bin"
BUILD_MARKER="/data/.built"
# Generate AUTH_SECRET if not provided
if [ -z "$AUTH_SECRET" ]; then
if [ -f "/data/.auth_secret" ]; then
export AUTH_SECRET=$(cat /data/.auth_secret)
else
export AUTH_SECRET=$(openssl rand -base64 32)
echo "$AUTH_SECRET" > /data/.auth_secret
echo "⚠ AUTH_SECRET generated and saved"
fi
fi
# Initialize PostgreSQL if needed
if [ ! -f "$PGDATA/PG_VERSION" ]; then
echo "▶ Initializing PostgreSQL..."
su postgres -c "$PGBIN/initdb -D $PGDATA"
cat >> "$PGDATA/postgresql.conf" << EOF
listen_addresses = 'localhost'
port = 5432
max_connections = 100
shared_buffers = 128MB
EOF
cat > "$PGDATA/pg_hba.conf" << EOF
local all all trust
host all all 127.0.0.1/32 trust
host all all ::1/128 trust
EOF
su postgres -c "$PGBIN/pg_ctl -D $PGDATA -l /tmp/pg.log start"
sleep 3
su postgres -c "$PGBIN/createuser -s prompts 2>/dev/null" || true
su postgres -c "$PGBIN/createdb -O prompts prompts 2>/dev/null" || true
su postgres -c "$PGBIN/pg_ctl -D $PGDATA stop"
sleep 2
echo "✓ PostgreSQL initialized"
fi
# Clone and build on first run
if [ ! -f "$BUILD_MARKER" ]; then
echo ""
echo "▶ First run detected - building prompts.chat..."
echo ""
# Clone repository
if [ ! -d "$APP_DIR/.git" ]; then
echo "▶ Cloning repository..."
rm -rf "$APP_DIR"
git clone --depth 1 "$REPO_URL" "$APP_DIR"
echo "✓ Repository cloned"
fi
cd "$APP_DIR"
# Clean up unnecessary files
rm -rf .github .claude packages .git
# Install dependencies (including devDependencies needed for build)
echo "▶ Installing dependencies..."
NODE_ENV=development npm ci
echo "✓ Dependencies installed"
# Run docker-setup.js to generate config with branding
echo "▶ Generating configuration..."
node scripts/docker-setup.js
echo "✓ Configuration generated"
# Generate Prisma client
echo "▶ Generating Prisma client..."
npx prisma generate
echo "✓ Prisma client generated"
# Build Next.js
echo "▶ Building Next.js application (this may take a few minutes)..."
npm run build
echo "✓ Build complete"
# Copy static files for standalone mode
echo "▶ Copying static assets..."
cp -r .next/static .next/standalone/.next/
cp -r public .next/standalone/
echo "✓ Static assets copied"
# Mark as built
touch "$BUILD_MARKER"
echo ""
echo "✅ Build complete! Starting application..."
echo ""
else
echo "✓ Using existing build"
cd "$APP_DIR"
fi
# Start supervisord (manages PostgreSQL and Next.js)
echo "▶ Starting services..."
/usr/bin/supervisord -c /etc/supervisor/conf.d/supervisord.conf &
SUPERVISOR_PID=$!
# Wait for PostgreSQL
echo "▶ Waiting for PostgreSQL..."
for i in $(seq 1 30); do
if $PGBIN/pg_isready -h localhost -p 5432 >/dev/null 2>&1; then
echo "✓ PostgreSQL is ready"
break
fi
if [ $i -eq 30 ]; then
echo "✗ PostgreSQL failed to start"
exit 1
fi
sleep 1
done
# Run migrations
echo "▶ Running database migrations..."
cd "$APP_DIR"
npx prisma migrate deploy
echo "✓ Migrations complete"
# Seed on first run only
SEED_MARKER="/data/.seeded"
if [ ! -f "$SEED_MARKER" ]; then
echo "▶ Seeding database..."
if npx tsx prisma/seed.ts 2>/dev/null; then
touch "$SEED_MARKER"
echo "✓ Database seeded"
else
echo "⚠ Seeding skipped"
fi
fi
# Wait for supervisord socket to be ready
echo "▶ Waiting for supervisord..."
for i in $(seq 1 30); do
if supervisorctl -c /etc/supervisor/conf.d/supervisord.conf status >/dev/null 2>&1; then
echo "✓ Supervisord is ready"
break
fi
if [ $i -eq 30 ]; then
echo "✗ Supervisord failed to start"
exit 1
fi
sleep 1
done
# Start Next.js
echo "▶ Starting Next.js..."
supervisorctl -c /etc/supervisor/conf.d/supervisord.conf start nextjs
echo ""
echo "╔═══════════════════════════════════════════════════════════════╗"
echo "║ ║"
echo "║ ✅ prompts.chat is running! ║"
echo "║ ║"
echo "║ 🌐 Open http://localhost:${PORT:-80} in your browser ║"
echo "║ ║"
echo "╚═══════════════════════════════════════════════════════════════╝"
echo ""
wait $SUPERVISOR_PID
+41
View File
@@ -0,0 +1,41 @@
#!/bin/sh
set -e
# Generate AUTH_SECRET if not provided
if [ -z "$AUTH_SECRET" ]; then
AUTH_SECRET=$(openssl rand -base64 32)
export AUTH_SECRET
echo "[prompts.chat] AUTH_SECRET not set -- generated a random value."
echo "[prompts.chat] Set AUTH_SECRET explicitly for production to persist sessions across restarts."
fi
# Wait for PostgreSQL to be ready
echo "[prompts.chat] Waiting for database..."
MAX_RETRIES=30
RETRY_COUNT=0
until node -e "
const net = require('net');
const url = new URL(process.env.DATABASE_URL);
const sock = net.createConnection({ host: url.hostname, port: url.port || 5432 });
sock.setTimeout(2000);
sock.on('connect', () => { sock.setTimeout(0); sock.destroy(); process.exit(0); });
sock.on('timeout', () => { sock.destroy(); process.exit(1); });
sock.on('error', () => process.exit(1));
" 2>/dev/null; do
RETRY_COUNT=$((RETRY_COUNT + 1))
if [ "$RETRY_COUNT" -ge "$MAX_RETRIES" ]; then
echo "[prompts.chat] ERROR: Database not reachable after ${MAX_RETRIES} attempts."
exit 1
fi
echo "[prompts.chat] Database not ready (attempt ${RETRY_COUNT}/${MAX_RETRIES}), retrying in 2s..."
sleep 2
done
# Run database migrations
echo "[prompts.chat] Running database migrations..."
npx prisma migrate deploy
echo "[prompts.chat] Migrations applied successfully."
# Start the application
echo "[prompts.chat] Starting application on port ${PORT:-3000}..."
exec node server.js
-28
View File
@@ -1,28 +0,0 @@
[supervisord]
nodaemon=true
user=root
logfile=/var/log/supervisor/supervisord.log
pidfile=/var/run/supervisord.pid
childlogdir=/var/log/supervisor
[program:postgresql]
command=/usr/lib/postgresql/15/bin/postgres -D /data/postgres
user=postgres
autostart=true
autorestart=true
priority=10
stdout_logfile=/var/log/supervisor/postgresql.log
stderr_logfile=/var/log/supervisor/postgresql-error.log
[program:nextjs]
command=node /data/app/.next/standalone/server.js
directory=/data/app
user=root
autostart=false
autorestart=true
priority=20
startsecs=10
startretries=3
environment=NODE_ENV="production",PORT="%(ENV_PORT)s",HOSTNAME="0.0.0.0",DATABASE_URL="%(ENV_DATABASE_URL)s",AUTH_SECRET="%(ENV_AUTH_SECRET)s"
stdout_logfile=/var/log/supervisor/nextjs.log
stderr_logfile=/var/log/supervisor/nextjs-error.log
+2 -1
View File
@@ -1,6 +1,6 @@
import type { MDXComponents } from "mdx/types";
import type { ComponentPropsWithoutRef } from "react";
import { BeforeAfterEditor, BookPartsNav, BREAKFramework, Callout, ChainErrorDemo, ChainExample, ChainFlowDemo, Checklist, CodeEditor, Collapsible, Compare, ContentPipelineDemo, ContextPlayground, ContextWindowDemo, CostCalculatorDemo, CRISPEFramework, DiffView, EmbeddingsDemo, FallbackDemo, FewShotDemo, FillInTheBlank, IconCheck, IconClipboard, IconLightbulb, IconLock, IconSettings, IconStar, IconTarget, IconUser, IconX, InfoGrid, InteractiveChecklist, IterativeRefinementDemo, JailbreakDemo, JsonYamlDemo, LLMCapabilitiesDemo, NavButton, NavFooter, PrinciplesSummary, PromptAnalyzer, PromptBreakdown, PromptBuilder, PromptChallenge, PromptDebugger, Quiz, RTFFramework, SpecificitySpectrum, StructuredOutputDemo, SummarizationDemo, TemperatureDemo, TextToImageDemo, TextToVideoDemo, TokenizerDemo, TokenPredictionDemo, TryIt, ValidationDemo, VersionDiff } from "@/components/book/interactive";
import { BeforeAfterEditor, BookPartsNav, BREAKFramework, Callout, ChainErrorDemo, ChainExample, ChainFlowDemo, Checklist, CodeEditor, Collapsible, Compare, ContentPipelineDemo, ContextPlayground, ContextWindowDemo, CostCalculatorDemo, CRISPEFramework, DiffView, EmbeddingsDemo, FallbackDemo, FewShotDemo, FillInTheBlank, IconCheck, IconClipboard, IconLightbulb, IconLock, IconSettings, IconStar, IconTarget, IconUser, IconX, InfoGrid, InteractiveChecklist, IterativeRefinementDemo, JailbreakDemo, JsonYamlDemo, LLMCapabilitiesDemo, LoopEngineeringLab, NavButton, NavFooter, PrinciplesSummary, PromptAnalyzer, PromptBreakdown, PromptBuilder, PromptChallenge, PromptDebugger, Quiz, RTFFramework, SpecificitySpectrum, StructuredOutputDemo, SummarizationDemo, TemperatureDemo, TextToImageDemo, TextToVideoDemo, TokenizerDemo, TokenPredictionDemo, TryIt, ValidationDemo, VersionDiff } from "@/components/book/interactive";
import { PromiCharacter, PromiWithMessage, Panel, StoryScene, PromptVsMistake, MagicWords, DragDropPrompt, LevelComplete, Section, PromptParts, ExampleMatcher, PromptDoctor, StepByStep, PromptLab, WordPredictor } from "@/components/kids/elements";
export function useMDXComponents(components: MDXComponents): MDXComponents {
@@ -62,6 +62,7 @@ export function useMDXComponents(components: MDXComponents): MDXComponents {
JailbreakDemo,
JsonYamlDemo,
LLMCapabilitiesDemo,
LoopEngineeringLab,
NavButton,
NavFooter,
PrinciplesSummary,
+13 -40
View File
@@ -1030,45 +1030,8 @@
}
},
"heroIndustries": {
"prefix": "أو استكشف حسب المجال",
"clickToExplore": "انقر للاستكشاف",
"searchPlaceholder": "ابحث عن برومبتات...",
"teachers": "المعلمون",
"developers": "المطورون",
"marketers": "المسوقون",
"designers": "المصممون",
"writers": "الكتّاب",
"analysts": "المحللون",
"entrepreneurs": "رواد الأعمال",
"researchers": "الباحثون",
"students": "الطلاب",
"consultants": "المستشارون",
"engineers": "المهندسون",
"creators": "المبدعون",
"lawyers": "المحامون",
"doctors": "الأطباء",
"nurses": "الممرضون",
"accountants": "المحاسبون",
"salespeople": "المبيعات",
"recruiters": "التوظيف",
"managers": "المدراء",
"executives": "التنفيذيون",
"freelancers": "المستقلون",
"photographers": "المصورون",
"musicians": "الموسيقيون",
"artists": "الفنانون",
"architects": "المعماريون",
"scientists": "العلماء",
"journalists": "الصحفيون",
"editors": "المحررون",
"translators": "المترجمون",
"coaches": "المدربون",
"therapists": "المعالجون",
"trainers": "المدربون",
"chefs": "الطهاة",
"realtors": "العقاريون",
"investors": "المستثمرون",
"traders": "المتداولون"
"videoTitle": "GitHub Open Source Friday"
},
"notFound": {
"title": "الصفحة غير موجودة",
@@ -1288,7 +1251,7 @@
"interactiveBanner": {
"badge": "النسخة التفاعلية متاحة",
"title": "هل تريد تجربة أكثر تفصيلاً وتفاعلية؟",
"description": "تعمق أكثر مع دليلنا التفاعلي الشامل الذي يضم 25 فصلاً وتمارين عملية وأمثلة من الواقع لإتقان كتابة الأوامر.",
"description": "تعمق أكثر مع دليلنا التفاعلي الشامل الذي يضم 26 فصلاً وتمارين عملية وأمثلة من الواقع لإتقان كتابة الأوامر.",
"cta": "اقرأ الكتاب التفاعلي"
},
"generalTips": {
@@ -1489,6 +1452,7 @@
"supportNow": "ادعم الآن",
"techStackTitle": "تطور التقنية",
"coreContributorsTitle": "المساهمون الأساسيون",
"securityTitle": "الأمان",
"designCreditsTitle": "التصميم",
"ideationTitle": "الأفكار",
"communityContributorsTitle": "مساهمو المجتمع",
@@ -1779,7 +1743,7 @@
"part4": "الجزء 4: أفضل الممارسات",
"part5": "الجزء 5: حالات الاستخدام",
"part6": "الجزء 6: الخاتمة",
"chapters": "25 فصلاً تفاعلياً"
"chapters": "26 فصلاً تفاعلياً"
},
"startReading": "ابدأ القراءة",
"skipToChapter1": "انتقل إلى الفصل 1",
@@ -1836,6 +1800,7 @@
"12-handling-edge-cases": "التعامل مع الحالات الحدية",
"13-multimodal-prompting": "الأوامر متعددة الوسائط",
"14-context-engineering": "هندسة السياق",
"14a-loop-engineering": "هندسة الحلقات",
"25-agents-and-skills": "الوكلاء والمهارات",
"15-common-pitfalls": "الأخطاء الشائعة",
"16-ethics-responsible-use": "الأخلاق والاستخدام المسؤول",
@@ -1866,6 +1831,7 @@
"12-handling-edge-cases": "التعامل مع المدخلات غير المتوقعة",
"13-multimodal-prompting": "العمل مع الصور والصوت والفيديو",
"14-context-engineering": "RAG، التضمينات، استدعاءات الوظائف و MCP",
"14a-loop-engineering": "تصميم حلقات تغذية راجعة تتصرف وتتحقق وتتكيف وتعرف متى تتوقف",
"25-agents-and-skills": "بناء وكلاء ذكاء اصطناعي بحزم مهارات قابلة لإعادة الاستخدام",
"15-common-pitfalls": "أخطاء يجب تجنبها",
"16-ethics-responsible-use": "الاعتبارات الأخلاقية في الذكاء الاصطناعي",
@@ -2263,5 +2229,12 @@
"submit": "إرسال",
"communityExamples": "أمثلة المجتمع",
"userExample": "مثال المستخدم"
},
"selfHosting": {
"prerequisites": {
"nodeJs": "Node.js 24.x",
"postgresql": "PostgreSQL database",
"npm": "npm"
}
}
}
+13 -40
View File
@@ -1025,45 +1025,8 @@
}
},
"heroIndustries": {
"prefix": "və ya sahəyə görə kəşf edin",
"clickToExplore": "Kəşf etmək üçün klikləyin",
"searchPlaceholder": "Promptları axtar...",
"teachers": "Müəllimlər",
"developers": "Tərtibatçılar",
"marketers": "Marketoloqlar",
"designers": "Dizaynerlər",
"writers": "Yazıçılar",
"analysts": "Analitiklər",
"entrepreneurs": "Sahibkarlar",
"researchers": "Tədqiqatçılar",
"students": "Tələbələr",
"consultants": "Məsləhətçilər",
"engineers": "Mühəndislər",
"creators": "Yaradıcılar",
"lawyers": "Vəkillər",
"doctors": "Həkimlər",
"nurses": "Tibb bacıları",
"accountants": "Mühasiblər",
"salespeople": "Satıcılar",
"recruiters": "İşə götürənlər",
"managers": "Menecerlər",
"executives": "İcraçılar",
"freelancers": "Frilanslər",
"photographers": "Fotoqraflar",
"musicians": "Musiqiçilər",
"artists": "Rəssamlar",
"architects": "Memarlar",
"scientists": "Alimlər",
"journalists": "Jurnalistlər",
"editors": "Redaktorlar",
"translators": "Tərcüməçilər",
"coaches": "Məşqçilər",
"therapists": "Terapevtlər",
"trainers": "Təlimçilər",
"chefs": "Aşpazlar",
"realtors": "Rieltorlar",
"investors": "İnvestorlar",
"traders": "Treyderlər"
"videoTitle": "GitHub Open Source Friday"
},
"promptBuilder": {
"title": "Prompt Qurma Agenti",
@@ -1288,7 +1251,7 @@
"interactiveBanner": {
"badge": "İnteraktiv Versiya Mövcuddur",
"title": "Daha Ətraflı və İnteraktiv Təcrübə İstəyirsiniz?",
"description": "25 fəsil, praktiki təmrinlər və real dünya nümunələri ilə hərtarafəli interaktiv rəhbərimizlə AI prompt yazmağı mənimsaəyin.",
"description": "26 fəsil, praktiki təmrinlər və real dünya nümunələri ilə hərtarafəli interaktiv rəhbərimizlə AI prompt yazmağı mənimsaəyin.",
"cta": "İnteraktiv Kitabı Oxuyun"
},
"generalTips": {
@@ -1489,6 +1452,7 @@
"supportNow": "İndi Dəstəklə",
"techStackTitle": "Texnoloji Təkamül",
"coreContributorsTitle": "Əsas Töhfəçilər",
"securityTitle": "Təhlükəsizlik",
"designCreditsTitle": "Dizayn",
"ideationTitle": "İdeya",
"communityContributorsTitle": "İcma Töhfəçiləri",
@@ -1779,7 +1743,7 @@
"part4": "Hissə 4: Ən Yaxşı Təcrübələr",
"part5": "Hissə 5: İstifadə Halları",
"part6": "Hissə 6: Nəticə",
"chapters": "25 İnteraktiv Fəsil"
"chapters": "26 İnteraktiv Fəsil"
},
"startReading": "Oxumağa Başla",
"skipToChapter1": "1-ci Fəsilə Keç",
@@ -1836,6 +1800,7 @@
"12-handling-edge-cases": "Kənar Hallarla Məşğul Olmaq",
"13-multimodal-prompting": "Multimodal Prompting",
"14-context-engineering": "Kontekst Mühəndisliyi",
"14a-loop-engineering": "Dövrə Mühəndisliyi",
"25-agents-and-skills": "Agentlər və Bacarıqlar",
"15-common-pitfalls": "Ümumi Səhvlər",
"16-ethics-responsible-use": "Etika və Məsuliyyətli İstifadə",
@@ -1866,6 +1831,7 @@
"12-handling-edge-cases": "Gözlənilməz girişlərlə məşğul olmaq",
"13-multimodal-prompting": "Şəkillər, audio və video ilə işləmək",
"14-context-engineering": "RAG, embeddinglər, funksiya çağırışı və MCP",
"14a-loop-engineering": "Hərəkət edən, yoxlayan, uyğunlaşan və nə vaxt dayanacağını bilən əks əlaqə dövrələri hazırlamaq",
"25-agents-and-skills": "Təkrar istifadə edilə bilən bacarıq paketləri ilə AI agentləri qurmaq",
"15-common-pitfalls": "Qarşısı alınmalı səhvlər",
"16-ethics-responsible-use": "AI-da etik mülahizələr",
@@ -2277,5 +2243,12 @@
"submit": "Göndər",
"communityExamples": "İcma Nümunələri",
"userExample": "İstifadəçi nümunəsi"
},
"selfHosting": {
"prerequisites": {
"nodeJs": "Node.js 24.x",
"postgresql": "PostgreSQL database",
"npm": "npm"
}
}
}
+13 -40
View File
@@ -1030,45 +1030,8 @@
}
},
"heroIndustries": {
"prefix": "oder nach Branche erkunden",
"clickToExplore": "Klicke zum Erkunden",
"searchPlaceholder": "Prompts suchen...",
"teachers": "Lehrer",
"developers": "Entwickler",
"marketers": "Marketer",
"designers": "Designer",
"writers": "Autoren",
"analysts": "Analysten",
"entrepreneurs": "Unternehmer",
"researchers": "Forscher",
"students": "Studenten",
"consultants": "Berater",
"engineers": "Ingenieure",
"creators": "Creator",
"lawyers": "Anwälte",
"doctors": "Ärzte",
"nurses": "Krankenpfleger",
"accountants": "Buchhalter",
"salespeople": "Verkäufer",
"recruiters": "Recruiter",
"managers": "Manager",
"executives": "Führungskräfte",
"freelancers": "Freelancer",
"photographers": "Fotografen",
"musicians": "Musiker",
"artists": "Künstler",
"architects": "Architekten",
"scientists": "Wissenschaftler",
"journalists": "Journalisten",
"editors": "Redakteure",
"translators": "Übersetzer",
"coaches": "Coaches",
"therapists": "Therapeuten",
"trainers": "Trainer",
"chefs": "Köche",
"realtors": "Makler",
"investors": "Investoren",
"traders": "Händler"
"videoTitle": "GitHub Open Source Friday"
},
"notFound": {
"title": "Seite nicht gefunden",
@@ -1288,7 +1251,7 @@
"interactiveBanner": {
"badge": "Interaktive Version Verfügbar",
"title": "Möchten Sie ein detaillierteres und interaktives Erlebnis?",
"description": "Tauchen Sie tiefer ein mit unserem umfassenden interaktiven Leitfaden mit 25 Kapiteln, praktischen Übungen und Beispielen aus der Praxis.",
"description": "Tauchen Sie tiefer ein mit unserem umfassenden interaktiven Leitfaden mit 26 Kapiteln, praktischen Übungen und Beispielen aus der Praxis.",
"cta": "Das interaktive Buch lesen"
},
"generalTips": {
@@ -1489,6 +1452,7 @@
"supportNow": "Jetzt unterstützen",
"techStackTitle": "Technologie-Evolution",
"coreContributorsTitle": "Kern-Mitwirkende",
"securityTitle": "Sicherheit",
"designCreditsTitle": "Design",
"ideationTitle": "Ideenfindung",
"communityContributorsTitle": "Community-Mitwirkende",
@@ -1779,7 +1743,7 @@
"part4": "Teil 4: Best Practices",
"part5": "Teil 5: Anwendungsfälle",
"part6": "Teil 6: Fazit",
"chapters": "25 Interaktive Kapitel"
"chapters": "26 Interaktive Kapitel"
},
"startReading": "Jetzt Lesen",
"skipToChapter1": "Zu Kapitel 1 springen",
@@ -1836,6 +1800,7 @@
"12-handling-edge-cases": "Umgang mit Grenzfällen",
"13-multimodal-prompting": "Multimodales Prompting",
"14-context-engineering": "Kontext-Engineering",
"14a-loop-engineering": "Loop-Engineering",
"25-agents-and-skills": "Agenten & Skills",
"15-common-pitfalls": "Häufige Fallstricke",
"16-ethics-responsible-use": "Ethik & Verantwortungsvolle Nutzung",
@@ -1866,6 +1831,7 @@
"12-handling-edge-cases": "Mit unerwarteten Eingaben umgehen",
"13-multimodal-prompting": "Mit Bildern, Audio und Video arbeiten",
"14-context-engineering": "RAG, Embeddings, Function Calling und MCP",
"14a-loop-engineering": "Feedbackschleifen entwerfen, die handeln, prüfen, sich anpassen und rechtzeitig stoppen",
"25-agents-and-skills": "KI-Agenten mit wiederverwendbaren Skill-Paketen erstellen",
"15-common-pitfalls": "Fehler, die Sie vermeiden sollten",
"16-ethics-responsible-use": "Ethische Überlegungen in der KI",
@@ -2277,5 +2243,12 @@
"submit": "Absenden",
"communityExamples": "Community-Beispiele",
"userExample": "Benutzerbeispiel"
},
"selfHosting": {
"prerequisites": {
"nodeJs": "Node.js 24.x",
"postgresql": "PostgreSQL database",
"npm": "npm"
}
}
}
+13 -40
View File
@@ -1051,45 +1051,8 @@
}
},
"heroIndustries": {
"prefix": "ή εξερευνήστε ανά κλάδο",
"clickToExplore": "Κάντε κλικ για εξερεύνηση",
"searchPlaceholder": "Αναζήτηση prompts...",
"teachers": "Εκπαιδευτικούς",
"developers": "Προγραμματιστές",
"marketers": "Μάρκετερ",
"designers": "Σχεδιαστές",
"writers": "Συγγραφείς",
"analysts": "Αναλυτές",
"entrepreneurs": "Επιχειρηματίες",
"researchers": "Ερευνητές",
"students": "Φοιτητές",
"consultants": "Συμβούλους",
"engineers": "Μηχανικούς",
"creators": "Δημιουργούς",
"lawyers": "Δικηγόρους",
"doctors": "Γιατρούς",
"nurses": "Νοσηλευτές",
"accountants": "Λογιστές",
"salespeople": "Πωλητές",
"recruiters": "Recruiters",
"managers": "Διευθυντές",
"executives": "Στελέχη",
"freelancers": "Ελεύθερους",
"photographers": "Φωτογράφους",
"musicians": "Μουσικούς",
"artists": "Καλλιτέχνες",
"architects": "Αρχιτέκτονες",
"scientists": "Επιστήμονες",
"journalists": "Δημοσιογράφους",
"editors": "Συντάκτες",
"translators": "Μεταφραστές",
"coaches": "Προπονητές",
"therapists": "Θεραπευτές",
"trainers": "Εκπαιδευτές",
"chefs": "Σεφ",
"realtors": "Μεσίτες",
"investors": "Επενδυτές",
"traders": "Traders"
"videoTitle": "GitHub Open Source Friday"
},
"promptBuilder": {
"title": "Prompt Building Agent",
@@ -1288,7 +1251,7 @@
"interactiveBanner": {
"badge": "Διαδραστική Έκδοση Διαθέσιμη",
"title": "Θέλετε μια πιο λεπτομερή και διαδραστική εμπειρία;",
"description": "Εμβαθύνετε με τον πλήρη διαδραστικό οδηγό μας με 25 κεφάλαια, πρακτικές ασκήσεις και παραδείγματα από τον πραγματικό κόσμο για να κατακτήσετε τα AI prompts.",
"description": "Εμβαθύνετε με τον πλήρη διαδραστικό οδηγό μας με 26 κεφάλαια, πρακτικές ασκήσεις και παραδείγματα από τον πραγματικό κόσμο για να κατακτήσετε τα AI prompts.",
"cta": "Διαβάστε το Διαδραστικό Βιβλίο"
},
"generalTips": {
@@ -1489,6 +1452,7 @@
"supportNow": "Υποστηρίξτε Τώρα",
"techStackTitle": "Εξέλιξη Τεχνολογίας",
"coreContributorsTitle": "Κύριοι Συνεισφέροντες",
"securityTitle": "Ασφάλεια",
"designCreditsTitle": "Σχεδιασμός",
"ideationTitle": "Ιδέες",
"communityContributorsTitle": "Συνεισφέροντες Κοινότητας",
@@ -1779,7 +1743,7 @@
"part4": "Μέρος 4: Βέλτιστες Πρακτικές",
"part5": "Μέρος 5: Περιπτώσεις Χρήσης",
"part6": "Μέρος 6: Συμπέρασμα",
"chapters": "25 Διαδραστικά Κεφάλαια"
"chapters": "26 Διαδραστικά Κεφάλαια"
},
"startReading": "Ξεκινήστε την Ανάγνωση",
"skipToChapter1": "Μετάβαση στο Κεφάλαιο 1",
@@ -1836,6 +1800,7 @@
"12-handling-edge-cases": "Διαχείριση Ακραίων Περιπτώσεων",
"13-multimodal-prompting": "Πολυτροπικό Prompting",
"14-context-engineering": "Μηχανική Πλαισίου",
"14a-loop-engineering": "Μηχανική Βρόχων",
"25-agents-and-skills": "Πράκτορες και Δεξιότητες",
"15-common-pitfalls": "Συνήθη Λάθη",
"16-ethics-responsible-use": "Ηθική και Υπεύθυνη Χρήση",
@@ -1866,6 +1831,7 @@
"12-handling-edge-cases": "Διαχείριση απροσδόκητης εισόδου",
"13-multimodal-prompting": "Εργασία με εικόνες, ήχο και βίντεο",
"14-context-engineering": "RAG, embeddings, κλήσεις συναρτήσεων και MCP",
"14a-loop-engineering": "Σχεδιασμός βρόχων ανατροφοδότησης που δρουν, επαληθεύουν, προσαρμόζονται και γνωρίζουν πότε να σταματήσουν",
"25-agents-and-skills": "Δημιουργία AI πρακτόρων με επαναχρησιμοποιήσιμα πακέτα δεξιοτήτων",
"15-common-pitfalls": "Λάθη προς αποφυγή",
"16-ethics-responsible-use": "Ηθικές εκτιμήσεις στην AI",
@@ -2268,5 +2234,12 @@
"submit": "Υποβολή",
"communityExamples": "Παραδείγματα Κοινότητας",
"userExample": "Παράδειγμα Χρήστη"
},
"selfHosting": {
"prerequisites": {
"nodeJs": "Node.js 24.x",
"postgresql": "PostgreSQL database",
"npm": "npm"
}
}
}
+13 -40
View File
@@ -1025,45 +1025,8 @@
}
},
"heroIndustries": {
"prefix": "or explore by industry",
"clickToExplore": "Click to explore",
"searchPlaceholder": "Search prompts...",
"teachers": "Teachers",
"developers": "Developers",
"marketers": "Marketers",
"designers": "Designers",
"writers": "Writers",
"analysts": "Analysts",
"entrepreneurs": "Entrepreneurs",
"researchers": "Researchers",
"students": "Students",
"consultants": "Consultants",
"engineers": "Engineers",
"creators": "Creators",
"lawyers": "Lawyers",
"doctors": "Doctors",
"nurses": "Nurses",
"accountants": "Accountants",
"salespeople": "Salespeople",
"recruiters": "Recruiters",
"managers": "Managers",
"executives": "Executives",
"freelancers": "Freelancers",
"photographers": "Photographers",
"musicians": "Musicians",
"artists": "Artists",
"architects": "Architects",
"scientists": "Scientists",
"journalists": "Journalists",
"editors": "Editors",
"translators": "Translators",
"coaches": "Coaches",
"therapists": "Therapists",
"trainers": "Trainers",
"chefs": "Chefs",
"realtors": "Realtors",
"investors": "Investors",
"traders": "Traders"
"videoTitle": "GitHub Open Source Friday"
},
"promptBuilder": {
"title": "Prompt Building Agent",
@@ -1288,7 +1251,7 @@
"interactiveBanner": {
"badge": "Interactive Version Available",
"title": "Want a More Detailed & Interactive Experience?",
"description": "Dive deeper with our comprehensive interactive guide featuring 25 chapters, hands-on exercises, and real-world examples to master AI prompting.",
"description": "Dive deeper with our comprehensive interactive guide featuring 26 chapters, hands-on exercises, and real-world examples to master AI prompting.",
"cta": "Read the Interactive Book"
},
"generalTips": {
@@ -1489,6 +1452,7 @@
"supportNow": "Support Now",
"techStackTitle": "Tech Evolution",
"coreContributorsTitle": "Core Contributors",
"securityTitle": "Security",
"designCreditsTitle": "Design",
"ideationTitle": "Ideation",
"communityContributorsTitle": "Community Contributors",
@@ -1779,7 +1743,7 @@
"part4": "Part 4: Best Practices",
"part5": "Part 5: Use Cases",
"part6": "Part 6: Conclusion",
"chapters": "25 Interactive Chapters"
"chapters": "26 Interactive Chapters"
},
"startReading": "Start Reading",
"skipToChapter1": "Skip to Chapter 1",
@@ -1836,6 +1800,7 @@
"12-handling-edge-cases": "Handling Edge Cases",
"13-multimodal-prompting": "Multimodal Prompting",
"14-context-engineering": "Context Engineering",
"14a-loop-engineering": "Loop Engineering",
"25-agents-and-skills": "Agents & Skills",
"15-common-pitfalls": "Common Pitfalls",
"16-ethics-responsible-use": "Ethics & Responsible Use",
@@ -1866,6 +1831,7 @@
"12-handling-edge-cases": "Dealing with unexpected inputs",
"13-multimodal-prompting": "Working with images, audio, and video",
"14-context-engineering": "RAG, embeddings, function calling, and MCP",
"14a-loop-engineering": "Designing feedback cycles that act, verify, adapt, and know when to stop",
"25-agents-and-skills": "Building AI agents with reusable skill packages",
"15-common-pitfalls": "Mistakes to avoid",
"16-ethics-responsible-use": "Ethical considerations in AI",
@@ -2281,5 +2247,12 @@
"submit": "Submit",
"communityExamples": "Community Examples",
"userExample": "User example"
},
"selfHosting": {
"prerequisites": {
"nodeJs": "Node.js 24.x",
"postgresql": "PostgreSQL database",
"npm": "npm"
}
}
}
+13 -40
View File
@@ -1030,45 +1030,8 @@
}
},
"heroIndustries": {
"prefix": "o explora por industria",
"clickToExplore": "Haz clic para explorar",
"searchPlaceholder": "Buscar prompts...",
"teachers": "Profesores",
"developers": "Desarrolladores",
"marketers": "Marketers",
"designers": "Diseñadores",
"writers": "Escritores",
"analysts": "Analistas",
"entrepreneurs": "Emprendedores",
"researchers": "Investigadores",
"students": "Estudiantes",
"consultants": "Consultores",
"engineers": "Ingenieros",
"creators": "Creadores",
"lawyers": "Abogados",
"doctors": "Médicos",
"nurses": "Enfermeros",
"accountants": "Contadores",
"salespeople": "Vendedores",
"recruiters": "Reclutadores",
"managers": "Gerentes",
"executives": "Ejecutivos",
"freelancers": "Freelancers",
"photographers": "Fotógrafos",
"musicians": "Músicos",
"artists": "Artistas",
"architects": "Arquitectos",
"scientists": "Científicos",
"journalists": "Periodistas",
"editors": "Editores",
"translators": "Traductores",
"coaches": "Coaches",
"therapists": "Terapeutas",
"trainers": "Entrenadores",
"chefs": "Chefs",
"realtors": "Agentes",
"investors": "Inversores",
"traders": "Traders"
"videoTitle": "GitHub Open Source Friday"
},
"notFound": {
"title": "Página No Encontrada",
@@ -1288,7 +1251,7 @@
"interactiveBanner": {
"badge": "Versión Interactiva Disponible",
"title": "¿Quieres una Experiencia Más Detallada e Interactiva?",
"description": "Profundiza con nuestra guía interactiva completa con 25 capítulos, ejercicios prácticos y ejemplos del mundo real para dominar los prompts de IA.",
"description": "Profundiza con nuestra guía interactiva completa con 26 capítulos, ejercicios prácticos y ejemplos del mundo real para dominar los prompts de IA.",
"cta": "Leer el Libro Interactivo"
},
"generalTips": {
@@ -1489,6 +1452,7 @@
"supportNow": "Apoyar Ahora",
"techStackTitle": "Evolución Tecnológica",
"coreContributorsTitle": "Contribuidores Principales",
"securityTitle": "Seguridad",
"designCreditsTitle": "Diseño",
"ideationTitle": "Ideación",
"communityContributorsTitle": "Contribuidores de la Comunidad",
@@ -1779,7 +1743,7 @@
"part4": "Parte 4: Mejores Prácticas",
"part5": "Parte 5: Casos de Uso",
"part6": "Parte 6: Conclusión",
"chapters": "25 Capítulos Interactivos"
"chapters": "26 Capítulos Interactivos"
},
"startReading": "Comenzar a Leer",
"skipToChapter1": "Ir al Capítulo 1",
@@ -1836,6 +1800,7 @@
"12-handling-edge-cases": "Manejo de Casos Límite",
"13-multimodal-prompting": "Prompting Multimodal",
"14-context-engineering": "Ingeniería de Contexto",
"14a-loop-engineering": "Ingeniería de Bucles",
"25-agents-and-skills": "Agentes y Habilidades",
"15-common-pitfalls": "Errores Comunes",
"16-ethics-responsible-use": "Ética y Uso Responsable",
@@ -1866,6 +1831,7 @@
"12-handling-edge-cases": "Manejar entradas inesperadas",
"13-multimodal-prompting": "Trabajar con imágenes, audio y video",
"14-context-engineering": "RAG, embeddings, llamadas a funciones y MCP",
"14a-loop-engineering": "Diseñar ciclos de retroalimentación que actúan, verifican, se adaptan y saben cuándo detenerse",
"25-agents-and-skills": "Construir agentes de IA con paquetes de habilidades reutilizables",
"15-common-pitfalls": "Errores a evitar",
"16-ethics-responsible-use": "Consideraciones éticas en IA",
@@ -2280,5 +2246,12 @@
"submit": "Enviar",
"communityExamples": "Ejemplos de la Comunidad",
"userExample": "Ejemplo de usuario"
},
"selfHosting": {
"prerequisites": {
"nodeJs": "Node.js 24.x",
"postgresql": "PostgreSQL database",
"npm": "npm"
}
}
}
+13 -40
View File
@@ -1025,45 +1025,8 @@
}
},
"heroIndustries": {
"prefix": "یا بر اساس صنعت کاوش کنید",
"clickToExplore": "برای کاوش کلیک کنید",
"searchPlaceholder": "جستجوی پرامپت...",
"teachers": "معلمان",
"developers": "توسعه‌دهندگان",
"marketers": "بازاریابان",
"designers": "طراحان",
"writers": "نویسندگان",
"analysts": "تحلیلگران",
"entrepreneurs": "کارآفرینان",
"researchers": "پژوهشگران",
"students": "دانشجویان",
"consultants": "مشاوران",
"engineers": "مهندسان",
"creators": "خالقان",
"lawyers": "وکلا",
"doctors": "پزشکان",
"nurses": "پرستاران",
"accountants": "حسابداران",
"salespeople": "فروشندگان",
"recruiters": "استخدام‌کنندگان",
"managers": "مدیران",
"executives": "مدیران ارشد",
"freelancers": "فریلنسرها",
"photographers": "عکاسان",
"musicians": "موسیقیدانان",
"artists": "هنرمندان",
"architects": "معماران",
"scientists": "دانشمندان",
"journalists": "روزنامه‌نگاران",
"editors": "ویراستاران",
"translators": "مترجمان",
"coaches": "مربیان",
"therapists": "درمانگران",
"trainers": "آموزش‌دهندگان",
"chefs": "سرآشپزها",
"realtors": "مشاوران املاک",
"investors": "سرمایه‌گذاران",
"traders": "معامله‌گران"
"videoTitle": "GitHub Open Source Friday"
},
"promptBuilder": {
"title": "عامل ساخت پرامپت",
@@ -1288,7 +1251,7 @@
"interactiveBanner": {
"badge": "نسخه تعاملی موجود است",
"title": "می‌خواهید تجربه‌ای دقیق‌تر و تعاملی‌تر داشته باشید؟",
"description": "با راهنمای تعاملی جامع ما شامل ۲۵ فصل، تمرین‌های عملی و مثال‌های واقعی، در نوشتن پرامپت‌های هوش مصنوعی مهارت پیدا کنید.",
"description": "با راهنمای تعاملی جامع ما شامل ۲۶ فصل، تمرین‌های عملی و مثال‌های واقعی، در نوشتن پرامپت‌های هوش مصنوعی مهارت پیدا کنید.",
"cta": "کتاب تعاملی را بخوانید"
},
"generalTips": {
@@ -1489,6 +1452,7 @@
"supportNow": "همین الان حمایت کنید",
"techStackTitle": "تکامل فناوری",
"coreContributorsTitle": "مشارکت‌کنندگان اصلی",
"securityTitle": "امنیت",
"designCreditsTitle": "طراحی",
"ideationTitle": "ایده‌پردازی",
"communityContributorsTitle": "مشارکت‌کنندگان جامعه",
@@ -1779,7 +1743,7 @@
"part4": "بخش ۴: بهترین شیوه‌ها",
"part5": "بخش ۵: موارد استفاده",
"part6": "بخش ۶: نتیجه‌گیری",
"chapters": "۲۵ فصل تعاملی"
"chapters": "۲۶ فصل تعاملی"
},
"startReading": "شروع مطالعه",
"skipToChapter1": "رفتن به فصل ۱",
@@ -1836,6 +1800,7 @@
"12-handling-edge-cases": "مدیریت موارد حاشیه‌ای",
"13-multimodal-prompting": "پرامپت‌نویسی چندوجهی",
"14-context-engineering": "مهندسی زمینه",
"14a-loop-engineering": "مهندسی حلقه",
"25-agents-and-skills": "عامل‌ها و مهارت‌ها",
"15-common-pitfalls": "اشتباهات رایج",
"16-ethics-responsible-use": "اخلاق و استفاده مسئولانه",
@@ -1866,6 +1831,7 @@
"12-handling-edge-cases": "مدیریت ورودی غیرمنتظره",
"13-multimodal-prompting": "کار با تصاویر، صوت و ویدیو",
"14-context-engineering": "RAG، امبدینگ‌ها، فراخوانی توابع و MCP",
"14a-loop-engineering": "طراحی چرخه‌های بازخوردی که اقدام می‌کنند، راستی‌آزمایی می‌کنند، تطبیق می‌یابند و می‌دانند کِی متوقف شوند",
"25-agents-and-skills": "ساخت عامل‌های هوش مصنوعی با بسته‌های مهارت قابل استفاده مجدد",
"15-common-pitfalls": "اشتباهاتی که باید از آنها اجتناب کرد",
"16-ethics-responsible-use": "ملاحظات اخلاقی در هوش مصنوعی",
@@ -2261,5 +2227,12 @@
"submit": "ارسال",
"communityExamples": "مثال‌های جامعه",
"userExample": "مثال کاربر"
},
"selfHosting": {
"prerequisites": {
"nodeJs": "Node.js 24.x",
"postgresql": "PostgreSQL database",
"npm": "npm"
}
}
}
+13 -40
View File
@@ -1030,45 +1030,8 @@
}
},
"heroIndustries": {
"prefix": "ou explorez par secteur",
"clickToExplore": "Cliquez pour explorer",
"searchPlaceholder": "Rechercher des prompts...",
"teachers": "Enseignants",
"developers": "Développeurs",
"marketers": "Marketeurs",
"designers": "Designers",
"writers": "Écrivains",
"analysts": "Analystes",
"entrepreneurs": "Entrepreneurs",
"researchers": "Chercheurs",
"students": "Étudiants",
"consultants": "Consultants",
"engineers": "Ingénieurs",
"creators": "Créateurs",
"lawyers": "Avocats",
"doctors": "Médecins",
"nurses": "Infirmiers",
"accountants": "Comptables",
"salespeople": "Commerciaux",
"recruiters": "Recruteurs",
"managers": "Managers",
"executives": "Dirigeants",
"freelancers": "Freelances",
"photographers": "Photographes",
"musicians": "Musiciens",
"artists": "Artistes",
"architects": "Architectes",
"scientists": "Scientifiques",
"journalists": "Journalistes",
"editors": "Rédacteurs",
"translators": "Traducteurs",
"coaches": "Coachs",
"therapists": "Thérapeutes",
"trainers": "Formateurs",
"chefs": "Chefs",
"realtors": "Agents",
"investors": "Investisseurs",
"traders": "Traders"
"videoTitle": "GitHub Open Source Friday"
},
"notFound": {
"title": "Page Non Trouvée",
@@ -1288,7 +1251,7 @@
"interactiveBanner": {
"badge": "Version Interactive Disponible",
"title": "Vous voulez une expérience plus détaillée et interactive ?",
"description": "Approfondissez avec notre guide interactif complet comprenant 25 chapitres, des exercices pratiques et des exemples concrets pour maîtriser les prompts IA.",
"description": "Approfondissez avec notre guide interactif complet comprenant 26 chapitres, des exercices pratiques et des exemples concrets pour maîtriser les prompts IA.",
"cta": "Lire le Livre Interactif"
},
"generalTips": {
@@ -1489,6 +1452,7 @@
"supportNow": "Soutenir Maintenant",
"techStackTitle": "Évolution Technologique",
"coreContributorsTitle": "Contributeurs Principaux",
"securityTitle": "Sécurité",
"designCreditsTitle": "Design",
"ideationTitle": "Idéation",
"communityContributorsTitle": "Contributeurs de la Communauté",
@@ -1779,7 +1743,7 @@
"part4": "Partie 4 : Bonnes Pratiques",
"part5": "Partie 5 : Cas d'Utilisation",
"part6": "Partie 6 : Conclusion",
"chapters": "25 Chapitres Interactifs"
"chapters": "26 Chapitres Interactifs"
},
"startReading": "Commencer la Lecture",
"skipToChapter1": "Aller au Chapitre 1",
@@ -1836,6 +1800,7 @@
"12-handling-edge-cases": "Gestion des Cas Limites",
"13-multimodal-prompting": "Prompting Multimodal",
"14-context-engineering": "Ingénierie du Contexte",
"14a-loop-engineering": "Ingénierie de Boucle",
"25-agents-and-skills": "Agents et Compétences",
"15-common-pitfalls": "Pièges Courants",
"16-ethics-responsible-use": "Éthique et Utilisation Responsable",
@@ -1866,6 +1831,7 @@
"12-handling-edge-cases": "Gérer les entrées inattendues",
"13-multimodal-prompting": "Travailler avec images, audio et vidéo",
"14-context-engineering": "RAG, embeddings, appels de fonction et MCP",
"14a-loop-engineering": "Concevoir des boucles de rétroaction qui agissent, vérifient, s'adaptent et savent quand s'arrêter",
"25-agents-and-skills": "Construire des agents IA avec des packages de compétences réutilisables",
"15-common-pitfalls": "Erreurs à éviter",
"16-ethics-responsible-use": "Considérations éthiques dans l'IA",
@@ -2280,5 +2246,12 @@
"submit": "Soumettre",
"communityExamples": "Exemples de la Communauté",
"userExample": "Exemple utilisateur"
},
"selfHosting": {
"prerequisites": {
"nodeJs": "Node.js 24.x",
"postgresql": "PostgreSQL database",
"npm": "npm"
}
}
}
+13 -40
View File
@@ -1051,45 +1051,8 @@
}
},
"heroIndustries": {
"prefix": "או חקור לפי תעשייה",
"clickToExplore": "לחץ לחקירה",
"searchPlaceholder": "חפש פרומפטים...",
"teachers": "מורים",
"developers": "מפתחים",
"marketers": "משווקים",
"designers": "מעצבים",
"writers": "סופרים",
"analysts": "אנליסטים",
"entrepreneurs": "יזמים",
"researchers": "חוקרים",
"students": "סטודנטים",
"consultants": "יועצים",
"engineers": "מהנדסים",
"creators": "יוצרים",
"lawyers": "עורכי דין",
"doctors": "רופאים",
"nurses": "אחיות",
"accountants": "רואי חשבון",
"salespeople": "אנשי מכירות",
"recruiters": "מגייסים",
"managers": "מנהלים",
"executives": "בכירים",
"freelancers": "פרילנסרים",
"photographers": "צלמים",
"musicians": "מוזיקאים",
"artists": "אמנים",
"architects": "אדריכלים",
"scientists": "מדענים",
"journalists": "עיתונאים",
"editors": "עורכים",
"translators": "מתרגמים",
"coaches": "מאמנים",
"therapists": "מטפלים",
"trainers": "מדריכים",
"chefs": "שפים",
"realtors": "סוכני נדל״ן",
"investors": "משקיעים",
"traders": "סוחרים"
"videoTitle": "GitHub Open Source Friday"
},
"promptBuilder": {
"title": "סוכן בניית פרומפטים",
@@ -1288,7 +1251,7 @@
"interactiveBanner": {
"badge": "גרסה אינטראקטיבית זמינה",
"title": "רוצים חוויה מפורטת ואינטראקטיבית יותר?",
"description": "העמיקו עם המדריך האינטראקטיבי המקיף שלנו הכולל 25 פרקים, תרגילים מעשיים ודוגמאות מהעולם האמיתי לשליטה בפרומפטים ל-AI.",
"description": "העמיקו עם המדריך האינטראקטיבי המקיף שלנו הכולל 26 פרקים, תרגילים מעשיים ודוגמאות מהעולם האמיתי לשליטה בפרומפטים ל-AI.",
"cta": "קראו את הספר האינטראקטיבי"
},
"generalTips": {
@@ -1489,6 +1452,7 @@
"supportNow": "תמכו עכשיו",
"techStackTitle": "התפתחות טכנולוגית",
"coreContributorsTitle": "תורמים מרכזיים",
"securityTitle": "אבטחה",
"designCreditsTitle": "עיצוב",
"ideationTitle": "רעיונות",
"communityContributorsTitle": "תורמי קהילה",
@@ -1779,7 +1743,7 @@
"part4": "חלק 4: שיטות עבודה מומלצות",
"part5": "חלק 5: מקרי שימוש",
"part6": "חלק 6: סיכום",
"chapters": "25 פרקים אינטראקטיביים"
"chapters": "26 פרקים אינטראקטיביים"
},
"startReading": "התחל לקרוא",
"skipToChapter1": "דלג לפרק 1",
@@ -1836,6 +1800,7 @@
"12-handling-edge-cases": "טיפול במקרי קצה",
"13-multimodal-prompting": "Prompting רב-מודאלי",
"14-context-engineering": "הנדסת הקשר",
"14a-loop-engineering": "הנדסת לולאות",
"25-agents-and-skills": "סוכנים ומיומנויות",
"15-common-pitfalls": "מלכודות נפוצות",
"16-ethics-responsible-use": "אתיקה ושימוש אחראי",
@@ -1866,6 +1831,7 @@
"12-handling-edge-cases": "התמודדות עם קלט בלתי צפוי",
"13-multimodal-prompting": "עבודה עם תמונות, אודיו ווידאו",
"14-context-engineering": "RAG, embeddings, קריאות פונקציות ו-MCP",
"14a-loop-engineering": "תכנון לולאות משוב שפועלות, מאמתות, מסתגלות ויודעות מתי לעצור",
"25-agents-and-skills": "בניית סוכני AI עם חבילות מיומנות לשימוש חוזר",
"15-common-pitfalls": "טעויות שיש להימנע מהן",
"16-ethics-responsible-use": "שיקולים אתיים ב-AI",
@@ -2261,5 +2227,12 @@
"submit": "שלח",
"communityExamples": "דוגמאות קהילה",
"userExample": "דוגמת משתמש"
},
"selfHosting": {
"prerequisites": {
"nodeJs": "Node.js 24.x",
"postgresql": "PostgreSQL database",
"npm": "npm"
}
}
}
+13 -40
View File
@@ -1030,45 +1030,8 @@
}
},
"heroIndustries": {
"prefix": "o esplora per settore",
"clickToExplore": "Clicca per esplorare",
"searchPlaceholder": "Cerca prompt...",
"teachers": "Insegnanti",
"developers": "Sviluppatori",
"marketers": "Marketer",
"designers": "Designer",
"writers": "Scrittori",
"analysts": "Analisti",
"entrepreneurs": "Imprenditori",
"researchers": "Ricercatori",
"students": "Studenti",
"consultants": "Consulenti",
"engineers": "Ingegneri",
"creators": "Creatori",
"lawyers": "Avvocati",
"doctors": "Medici",
"nurses": "Infermieri",
"accountants": "Contabili",
"salespeople": "Venditori",
"recruiters": "Recruiter",
"managers": "Manager",
"executives": "Dirigenti",
"freelancers": "Freelancer",
"photographers": "Fotografi",
"musicians": "Musicisti",
"artists": "Artisti",
"architects": "Architetti",
"scientists": "Scienziati",
"journalists": "Giornalisti",
"editors": "Redattori",
"translators": "Traduttori",
"coaches": "Coach",
"therapists": "Terapeuti",
"trainers": "Formatori",
"chefs": "Chef",
"realtors": "Agenti",
"investors": "Investitori",
"traders": "Trader"
"videoTitle": "GitHub Open Source Friday"
},
"notFound": {
"title": "Pagina Non Trovata",
@@ -1288,7 +1251,7 @@
"interactiveBanner": {
"badge": "Versione Interattiva Disponibile",
"title": "Vuoi un'Esperienza Più Dettagliata e Interattiva?",
"description": "Approfondisci con la nostra guida interattiva completa con 25 capitoli, esercizi pratici ed esempi reali per padroneggiare i prompt IA.",
"description": "Approfondisci con la nostra guida interattiva completa con 26 capitoli, esercizi pratici ed esempi reali per padroneggiare i prompt IA.",
"cta": "Leggi il Libro Interattivo"
},
"generalTips": {
@@ -1489,6 +1452,7 @@
"supportNow": "Supporta Ora",
"techStackTitle": "Evoluzione Tecnologica",
"coreContributorsTitle": "Contributori Principali",
"securityTitle": "Sicurezza",
"designCreditsTitle": "Design",
"ideationTitle": "Ideazione",
"communityContributorsTitle": "Contributori della Community",
@@ -1779,7 +1743,7 @@
"part4": "Parte 4: Best Practice",
"part5": "Parte 5: Casi d'Uso",
"part6": "Parte 6: Conclusione",
"chapters": "25 Capitoli Interattivi"
"chapters": "26 Capitoli Interattivi"
},
"startReading": "Inizia a Leggere",
"skipToChapter1": "Vai al Capitolo 1",
@@ -1836,6 +1800,7 @@
"12-handling-edge-cases": "Gestione dei Casi Limite",
"13-multimodal-prompting": "Prompting Multimodale",
"14-context-engineering": "Ingegneria del Contesto",
"14a-loop-engineering": "Ingegneria dei Loop",
"25-agents-and-skills": "Agenti e Skill",
"15-common-pitfalls": "Errori Comuni",
"16-ethics-responsible-use": "Etica e Uso Responsabile",
@@ -1866,6 +1831,7 @@
"12-handling-edge-cases": "Gestire input inaspettati",
"13-multimodal-prompting": "Lavorare con immagini, audio e video",
"14-context-engineering": "RAG, embeddings, function calling e MCP",
"14a-loop-engineering": "Progettare cicli di feedback che agiscono, verificano, si adattano e sanno quando fermarsi",
"25-agents-and-skills": "Costruire agenti AI con pacchetti di skill riutilizzabili",
"15-common-pitfalls": "Errori da evitare",
"16-ethics-responsible-use": "Considerazioni etiche nell'AI",
@@ -2283,5 +2249,12 @@
"submit": "Invia",
"communityExamples": "Esempi della Community",
"userExample": "Esempio utente"
},
"selfHosting": {
"prerequisites": {
"nodeJs": "Node.js 24.x",
"postgresql": "PostgreSQL database",
"npm": "npm"
}
}
}
+13 -40
View File
@@ -1030,45 +1030,8 @@
}
},
"heroIndustries": {
"prefix": "または業種で探す",
"clickToExplore": "クリックして探索",
"searchPlaceholder": "プロンプトを検索...",
"teachers": "教師",
"developers": "開発者",
"marketers": "マーケター",
"designers": "デザイナー",
"writers": "ライター",
"analysts": "アナリスト",
"entrepreneurs": "起業家",
"researchers": "研究者",
"students": "学生",
"consultants": "コンサルタント",
"engineers": "エンジニア",
"creators": "クリエイター",
"lawyers": "弁護士",
"doctors": "医師",
"nurses": "看護師",
"accountants": "会計士",
"salespeople": "営業",
"recruiters": "採用担当",
"managers": "マネージャー",
"executives": "経営者",
"freelancers": "フリーランス",
"photographers": "写真家",
"musicians": "ミュージシャン",
"artists": "アーティスト",
"architects": "建築家",
"scientists": "科学者",
"journalists": "ジャーナリスト",
"editors": "編集者",
"translators": "翻訳者",
"coaches": "コーチ",
"therapists": "セラピスト",
"trainers": "トレーナー",
"chefs": "シェフ",
"realtors": "不動産業者",
"investors": "投資家",
"traders": "トレーダー"
"videoTitle": "GitHub Open Source Friday"
},
"notFound": {
"title": "ページが見つかりません",
@@ -1288,7 +1251,7 @@
"interactiveBanner": {
"badge": "インタラクティブ版が利用可能",
"title": "より詳細でインタラクティブな体験をお求めですか?",
"description": "25章、実践的な演習、実例を含む包括的なインタラクティブガイドで、AIプロンプトをマスターしましょう。",
"description": "26章、実践的な演習、実例を含む包括的なインタラクティブガイドで、AIプロンプトをマスターしましょう。",
"cta": "インタラクティブブックを読む"
},
"generalTips": {
@@ -1489,6 +1452,7 @@
"supportNow": "今すぐサポート",
"techStackTitle": "技術スタックの進化",
"coreContributorsTitle": "コアコントリビューター",
"securityTitle": "セキュリティ",
"designCreditsTitle": "デザイン",
"ideationTitle": "アイデア",
"communityContributorsTitle": "コミュニティコントリビューター",
@@ -1779,7 +1743,7 @@
"part4": "パート4:ベストプラクティス",
"part5": "パート5:ユースケース",
"part6": "パート6:結論",
"chapters": "25のインタラクティブチャプター"
"chapters": "26のインタラクティブチャプター"
},
"startReading": "読み始める",
"skipToChapter1": "第1章へ",
@@ -1836,6 +1800,7 @@
"12-handling-edge-cases": "エッジケースの処理",
"13-multimodal-prompting": "マルチモーダルプロンプティング",
"14-context-engineering": "コンテキストエンジニアリング",
"14a-loop-engineering": "ループエンジニアリング",
"25-agents-and-skills": "エージェントとスキル",
"15-common-pitfalls": "よくある落とし穴",
"16-ethics-responsible-use": "倫理と責任ある使用",
@@ -1866,6 +1831,7 @@
"12-handling-edge-cases": "予期しない入力を処理する",
"13-multimodal-prompting": "画像、音声、動画を扱う",
"14-context-engineering": "RAG、エンベディング、関数呼び出し、MCP",
"14a-loop-engineering": "行動し、検証し、適応し、停止すべき時を判断するフィードバックループの設計",
"25-agents-and-skills": "再利用可能なスキルパッケージでAIエージェントを構築する",
"15-common-pitfalls": "避けるべき間違い",
"16-ethics-responsible-use": "AIにおける倫理的考慮",
@@ -2265,5 +2231,12 @@
"submit": "送信",
"communityExamples": "コミュニティの例",
"userExample": "ユーザーの例"
},
"selfHosting": {
"prerequisites": {
"nodeJs": "Node.js 24.x",
"postgresql": "PostgreSQL database",
"npm": "npm"
}
}
}
+13 -40
View File
@@ -1030,45 +1030,8 @@
}
},
"heroIndustries": {
"prefix": "또는 업종별 탐색",
"clickToExplore": "클릭하여 탐색",
"searchPlaceholder": "프롬프트 검색...",
"teachers": "교사",
"developers": "개발자",
"marketers": "마케터",
"designers": "디자이너",
"writers": "작가",
"analysts": "분석가",
"entrepreneurs": "창업가",
"researchers": "연구자",
"students": "학생",
"consultants": "컨설턴트",
"engineers": "엔지니어",
"creators": "크리에이터",
"lawyers": "변호사",
"doctors": "의사",
"nurses": "간호사",
"accountants": "회계사",
"salespeople": "영업사원",
"recruiters": "채용담당자",
"managers": "매니저",
"executives": "임원",
"freelancers": "프리랜서",
"photographers": "사진작가",
"musicians": "음악가",
"artists": "아티스트",
"architects": "건축가",
"scientists": "과학자",
"journalists": "기자",
"editors": "편집자",
"translators": "번역가",
"coaches": "코치",
"therapists": "치료사",
"trainers": "트레이너",
"chefs": "셰프",
"realtors": "부동산",
"investors": "투자자",
"traders": "트레이더"
"videoTitle": "GitHub Open Source Friday"
},
"notFound": {
"title": "페이지를 찾을 수 없습니다",
@@ -1288,7 +1251,7 @@
"interactiveBanner": {
"badge": "인터랙티브 버전 제공",
"title": "더 상세하고 인터랙티브한 경험을 원하시나요?",
"description": "25개 챕터, 실습 연습, 실제 예제가 포함된 종합 인터랙티브 가이드로 AI 프롬프트를 마스터하세요.",
"description": "26개 챕터, 실습 연습, 실제 예제가 포함된 종합 인터랙티브 가이드로 AI 프롬프트를 마스터하세요.",
"cta": "인터랙티브 북 읽기"
},
"generalTips": {
@@ -1489,6 +1452,7 @@
"supportNow": "지금 후원하기",
"techStackTitle": "기술 스택 진화",
"coreContributorsTitle": "핵심 기여자",
"securityTitle": "보안",
"designCreditsTitle": "디자인",
"ideationTitle": "아이디어",
"communityContributorsTitle": "커뮤니티 기여자",
@@ -1779,7 +1743,7 @@
"part4": "파트 4: 모범 사례",
"part5": "파트 5: 사용 사례",
"part6": "파트 6: 결론",
"chapters": "25개 인터랙티브 챕터"
"chapters": "26개 인터랙티브 챕터"
},
"startReading": "읽기 시작",
"skipToChapter1": "1장으로 이동",
@@ -1836,6 +1800,7 @@
"12-handling-edge-cases": "엣지 케이스 처리",
"13-multimodal-prompting": "멀티모달 프롬프팅",
"14-context-engineering": "컨텍스트 엔지니어링",
"14a-loop-engineering": "루프 엔지니어링",
"25-agents-and-skills": "에이전트와 스킬",
"15-common-pitfalls": "흔한 실수",
"16-ethics-responsible-use": "윤리와 책임있는 사용",
@@ -1866,6 +1831,7 @@
"12-handling-edge-cases": "예상치 못한 입력 처리하기",
"13-multimodal-prompting": "이미지, 오디오, 비디오 작업",
"14-context-engineering": "RAG, 임베딩, 함수 호출 및 MCP",
"14a-loop-engineering": "행동하고 검증하고 적응하며 언제 멈출지 아는 피드백 루프 설계",
"25-agents-and-skills": "재사용 가능한 스킬 패키지로 AI 에이전트 구축",
"15-common-pitfalls": "피해야 할 실수",
"16-ethics-responsible-use": "AI의 윤리적 고려사항",
@@ -2265,5 +2231,12 @@
"submit": "제출",
"communityExamples": "커뮤니티 예제",
"userExample": "사용자 예제"
},
"selfHosting": {
"prerequisites": {
"nodeJs": "Node.js 24.x",
"postgresql": "PostgreSQL database",
"npm": "npm"
}
}
}
+13 -40
View File
@@ -1025,45 +1025,8 @@
}
},
"heroIndustries": {
"prefix": "of verken per industrie",
"clickToExplore": "Klik om te verkennen",
"searchPlaceholder": "Prompts zoeken...",
"teachers": "Docenten",
"developers": "Ontwikkelaars",
"marketers": "Marketeers",
"designers": "Ontwerpers",
"writers": "Schrijvers",
"analysts": "Analisten",
"entrepreneurs": "Ondernemers",
"researchers": "Onderzoekers",
"students": "Studenten",
"consultants": "Consultants",
"engineers": "Ingenieurs",
"creators": "Creators",
"lawyers": "Advocaten",
"doctors": "Artsen",
"nurses": "Verpleegkundigen",
"accountants": "Accountants",
"salespeople": "Verkopers",
"recruiters": "Recruiters",
"managers": "Managers",
"executives": "Directeuren",
"freelancers": "Freelancers",
"photographers": "Fotografen",
"musicians": "Muzikanten",
"artists": "Kunstenaars",
"architects": "Architecten",
"scientists": "Wetenschappers",
"journalists": "Journalisten",
"editors": "Redacteuren",
"translators": "Vertalers",
"coaches": "Coaches",
"therapists": "Therapeuten",
"trainers": "Trainers",
"chefs": "Chefs",
"realtors": "Makelaars",
"investors": "Investeerders",
"traders": "Handelaren"
"videoTitle": "GitHub Open Source Friday"
},
"promptBuilder": {
"title": "Prompt Building Agent",
@@ -1288,7 +1251,7 @@
"interactiveBanner": {
"badge": "Interactieve versie beschikbaar",
"title": "Wil je een meer gedetailleerde & interactieve ervaring?",
"description": "Duik dieper met onze uitgebreide interactieve gids met 25 hoofdstukken, praktische oefeningen en echte voorbeelden om AI-prompting te beheersen.",
"description": "Duik dieper met onze uitgebreide interactieve gids met 26 hoofdstukken, praktische oefeningen en echte voorbeelden om AI-prompting te beheersen.",
"cta": "Lees het interactieve boek"
},
"generalTips": {
@@ -1489,6 +1452,7 @@
"supportNow": "Steun nu",
"techStackTitle": "Tech-evolutie",
"coreContributorsTitle": "Kernbijdragers",
"securityTitle": "Beveiliging",
"designCreditsTitle": "Ontwerp",
"ideationTitle": "Ideeën",
"communityContributorsTitle": "Community-bijdragers",
@@ -1779,7 +1743,7 @@
"part4": "Deel 4: Best Practices",
"part5": "Deel 5: Use Cases",
"part6": "Deel 6: Conclusie",
"chapters": "25 Interactieve Hoofdstukken"
"chapters": "26 Interactieve Hoofdstukken"
},
"startReading": "Begin met Lezen",
"skipToChapter1": "Ga naar Hoofdstuk 1",
@@ -1836,6 +1800,7 @@
"12-handling-edge-cases": "Omgaan met Edge Cases",
"13-multimodal-prompting": "Multimodale Prompting",
"14-context-engineering": "Context Engineering",
"14a-loop-engineering": "Loop Engineering",
"25-agents-and-skills": "Agents en Skills",
"15-common-pitfalls": "Veelvoorkomende Valkuilen",
"16-ethics-responsible-use": "Ethiek en Verantwoord Gebruik",
@@ -1866,6 +1831,7 @@
"12-handling-edge-cases": "Omgaan met onverwachte input",
"13-multimodal-prompting": "Werken met afbeeldingen, audio en video",
"14-context-engineering": "RAG, embeddings, function calling en MCP",
"14a-loop-engineering": "Feedbackloops ontwerpen die handelen, verifiëren, bijsturen en weten wanneer ze moeten stoppen",
"25-agents-and-skills": "AI-agents bouwen met herbruikbare skill-pakketten",
"15-common-pitfalls": "Fouten om te vermijden",
"16-ethics-responsible-use": "Ethische overwegingen in AI",
@@ -2268,5 +2234,12 @@
"submit": "Versturen",
"communityExamples": "Community Voorbeelden",
"userExample": "Gebruikers Voorbeeld"
},
"selfHosting": {
"prerequisites": {
"nodeJs": "Node.js 24.x",
"postgresql": "PostgreSQL database",
"npm": "npm"
}
}
}
+13 -40
View File
@@ -1030,45 +1030,8 @@
}
},
"heroIndustries": {
"prefix": "ou explore por setor",
"clickToExplore": "Clique para explorar",
"searchPlaceholder": "Pesquisar prompts...",
"teachers": "Professores",
"developers": "Desenvolvedores",
"marketers": "Marketers",
"designers": "Designers",
"writers": "Escritores",
"analysts": "Analistas",
"entrepreneurs": "Empreendedores",
"researchers": "Pesquisadores",
"students": "Estudantes",
"consultants": "Consultores",
"engineers": "Engenheiros",
"creators": "Criadores",
"lawyers": "Advogados",
"doctors": "Médicos",
"nurses": "Enfermeiros",
"accountants": "Contadores",
"salespeople": "Vendedores",
"recruiters": "Recrutadores",
"managers": "Gerentes",
"executives": "Executivos",
"freelancers": "Freelancers",
"photographers": "Fotógrafos",
"musicians": "Músicos",
"artists": "Artistas",
"architects": "Arquitetos",
"scientists": "Cientistas",
"journalists": "Jornalistas",
"editors": "Editores",
"translators": "Tradutores",
"coaches": "Coaches",
"therapists": "Terapeutas",
"trainers": "Treinadores",
"chefs": "Chefs",
"realtors": "Corretores",
"investors": "Investidores",
"traders": "Traders"
"videoTitle": "GitHub Open Source Friday"
},
"notFound": {
"title": "Página Não Encontrada",
@@ -1288,7 +1251,7 @@
"interactiveBanner": {
"badge": "Versão Interativa Disponível",
"title": "Quer uma Experiência Mais Detalhada e Interativa?",
"description": "Aprofunde-se com nosso guia interativo completo com 25 capítulos, exercícios práticos e exemplos do mundo real para dominar prompts de IA.",
"description": "Aprofunde-se com nosso guia interativo completo com 26 capítulos, exercícios práticos e exemplos do mundo real para dominar prompts de IA.",
"cta": "Ler o Livro Interativo"
},
"generalTips": {
@@ -1489,6 +1452,7 @@
"supportNow": "Apoiar Agora",
"techStackTitle": "Evolução Tecnológica",
"coreContributorsTitle": "Contribuidores Principais",
"securityTitle": "Segurança",
"designCreditsTitle": "Design",
"ideationTitle": "Ideação",
"communityContributorsTitle": "Contribuidores da Comunidade",
@@ -1779,7 +1743,7 @@
"part4": "Parte 4: Melhores Práticas",
"part5": "Parte 5: Casos de Uso",
"part6": "Parte 6: Conclusão",
"chapters": "25 Capítulos Interativos"
"chapters": "26 Capítulos Interativos"
},
"startReading": "Começar a Ler",
"skipToChapter1": "Ir para o Capítulo 1",
@@ -1836,6 +1800,7 @@
"12-handling-edge-cases": "Tratamento de Casos Limites",
"13-multimodal-prompting": "Prompting Multimodal",
"14-context-engineering": "Engenharia de Contexto",
"14a-loop-engineering": "Engenharia de Loop",
"25-agents-and-skills": "Agentes e Habilidades",
"15-common-pitfalls": "Erros Comuns",
"16-ethics-responsible-use": "Ética e Uso Responsável",
@@ -1866,6 +1831,7 @@
"12-handling-edge-cases": "Lidar com entradas inesperadas",
"13-multimodal-prompting": "Trabalhar com imagens, áudio e vídeo",
"14-context-engineering": "RAG, embeddings, chamadas de função e MCP",
"14a-loop-engineering": "Projetar loops de feedback que agem, verificam, se adaptam e sabem quando parar",
"25-agents-and-skills": "Construir agentes de IA com pacotes de habilidades reutilizáveis",
"15-common-pitfalls": "Erros a evitar",
"16-ethics-responsible-use": "Considerações éticas em IA",
@@ -2279,5 +2245,12 @@
"submit": "Enviar",
"communityExamples": "Exemplos da Comunidade",
"userExample": "Exemplo do usuário"
},
"selfHosting": {
"prerequisites": {
"nodeJs": "Node.js 24.x",
"postgresql": "PostgreSQL database",
"npm": "npm"
}
}
}
+13 -40
View File
@@ -1051,45 +1051,8 @@
}
},
"heroIndustries": {
"prefix": "или исследуйте по отрасли",
"clickToExplore": "Нажмите для изучения",
"searchPlaceholder": "Поиск промптов...",
"teachers": "Учителей",
"developers": "Разработчиков",
"marketers": "Маркетологов",
"designers": "Дизайнеров",
"writers": "Писателей",
"analysts": "Аналитиков",
"entrepreneurs": "Предпринимателей",
"researchers": "Исследователей",
"students": "Студентов",
"consultants": "Консультантов",
"engineers": "Инженеров",
"creators": "Создателей",
"lawyers": "Юристов",
"doctors": "Врачей",
"nurses": "Медсестёр",
"accountants": "Бухгалтеров",
"salespeople": "Продавцов",
"recruiters": "Рекрутеров",
"managers": "Менеджеров",
"executives": "Руководителей",
"freelancers": "Фрилансеров",
"photographers": "Фотографов",
"musicians": "Музыкантов",
"artists": "Художников",
"architects": "Архитекторов",
"scientists": "Учёных",
"journalists": "Журналистов",
"editors": "Редакторов",
"translators": "Переводчиков",
"coaches": "Коучей",
"therapists": "Терапевтов",
"trainers": "Тренеров",
"chefs": "Поваров",
"realtors": "Риелторов",
"investors": "Инвесторов",
"traders": "Трейдеров"
"videoTitle": "GitHub Open Source Friday"
},
"promptBuilder": {
"title": "Агент создания промптов",
@@ -1288,7 +1251,7 @@
"interactiveBanner": {
"badge": "Доступна интерактивная версия",
"title": "Хотите более детальный и интерактивный опыт?",
"description": "Погрузитесь глубже с нашим комплексным интерактивным руководством из 25 глав, практических упражнений и реальных примеров для мастерства в AI-промптах.",
"description": "Погрузитесь глубже с нашим комплексным интерактивным руководством из 26 глав, практических упражнений и реальных примеров для мастерства в AI-промптах.",
"cta": "Читать интерактивную книгу"
},
"generalTips": {
@@ -1489,6 +1452,7 @@
"supportNow": "Поддержать сейчас",
"techStackTitle": "Эволюция технологий",
"coreContributorsTitle": "Основные участники",
"securityTitle": "Безопасность",
"designCreditsTitle": "Дизайн",
"ideationTitle": "Идеи",
"communityContributorsTitle": "Участники сообщества",
@@ -1779,7 +1743,7 @@
"part4": "Часть 4: Лучшие практики",
"part5": "Часть 5: Примеры использования",
"part6": "Часть 6: Заключение",
"chapters": "25 интерактивных глав"
"chapters": "26 интерактивных глав"
},
"startReading": "Начать чтение",
"skipToChapter1": "Перейти к Главе 1",
@@ -1836,6 +1800,7 @@
"12-handling-edge-cases": "Обработка крайних случаев",
"13-multimodal-prompting": "Мультимодальный промптинг",
"14-context-engineering": "Контекстная инженерия",
"14a-loop-engineering": "Инженерия циклов",
"25-agents-and-skills": "Агенты и навыки",
"15-common-pitfalls": "Распространённые ошибки",
"16-ethics-responsible-use": "Этика и ответственное использование",
@@ -1866,6 +1831,7 @@
"12-handling-edge-cases": "Обработка неожиданного ввода",
"13-multimodal-prompting": "Работа с изображениями, аудио и видео",
"14-context-engineering": "RAG, эмбеддинги, вызовы функций и MCP",
"14a-loop-engineering": "Проектирование циклов обратной связи, которые действуют, проверяют, адаптируются и вовремя останавливаются",
"25-agents-and-skills": "Создание AI-агентов с переиспользуемыми пакетами навыков",
"15-common-pitfalls": "Ошибки, которых следует избегать",
"16-ethics-responsible-use": "Этические соображения в AI",
@@ -2262,5 +2228,12 @@
"submit": "Отправить",
"communityExamples": "Примеры сообщества",
"userExample": "Пример пользователя"
},
"selfHosting": {
"prerequisites": {
"nodeJs": "Node.js 24.x",
"postgresql": "PostgreSQL database",
"npm": "npm"
}
}
}
+13 -40
View File
@@ -1030,45 +1030,8 @@
}
},
"heroIndustries": {
"prefix": "veya sektöre göre keşfet",
"clickToExplore": "Keşfetmek için tıkla",
"searchPlaceholder": "Prompt ara...",
"teachers": "Öğretmenler",
"developers": "Geliştiriciler",
"marketers": "Pazarlamacılar",
"designers": "Tasarımcılar",
"writers": "Yazarlar",
"analysts": "Analistler",
"entrepreneurs": "Girişimciler",
"researchers": "Araştırmacılar",
"students": "Öğrenciler",
"consultants": "Danışmanlar",
"engineers": "Mühendisler",
"creators": "İçerik Üreticileri",
"lawyers": "Avukatlar",
"doctors": "Doktorlar",
"nurses": "Hemşireler",
"accountants": "Muhasebeciler",
"salespeople": "Satışçılar",
"recruiters": "İK Uzmanları",
"managers": "Yöneticiler",
"executives": "Üst Yöneticiler",
"freelancers": "Serbest Çalışanlar",
"photographers": "Fotoğrafçılar",
"musicians": "Müzisyenler",
"artists": "Sanatçılar",
"architects": "Mimarlar",
"scientists": "Bilim İnsanları",
"journalists": "Gazeteciler",
"editors": "Editörler",
"translators": "Çevirmenler",
"coaches": "Koçlar",
"therapists": "Terapistler",
"trainers": "Eğitmenler",
"chefs": "Şefler",
"realtors": "Emlakçılar",
"investors": "Yatırımcılar",
"traders": "Tüccarlar"
"videoTitle": "GitHub Open Source Friday"
},
"notFound": {
"title": "Sayfa Bulunamadı",
@@ -1288,7 +1251,7 @@
"interactiveBanner": {
"badge": "İnteraktif Versiyon Mevcut",
"title": "Daha Detaylı ve İnteraktif Bir Deneyim mi İstiyorsunuz?",
"description": "25 bölüm, uygulamalı alıştırmalar ve gerçek dünya örnekleri içeren kapsamlı interaktif rehberimizle AI prompt yazımında ustalaşın.",
"description": "26 bölüm, uygulamalı alıştırmalar ve gerçek dünya örnekleri içeren kapsamlı interaktif rehberimizle AI prompt yazımında ustalaşın.",
"cta": "İnteraktif Kitabı Oku"
},
"generalTips": {
@@ -1489,6 +1452,7 @@
"supportNow": "Şimdi Destekle",
"techStackTitle": "Teknoloji Evrimi",
"coreContributorsTitle": "Çekirdek Katkıda Bulunanlar",
"securityTitle": "Güvenlik",
"designCreditsTitle": "Tasarım",
"ideationTitle": "Fikir",
"communityContributorsTitle": "Topluluk Katkıda Bulunanları",
@@ -1779,7 +1743,7 @@
"part4": "Bölüm 4: En İyi Uygulamalar",
"part5": "Bölüm 5: Kullanım Senaryoları",
"part6": "Bölüm 6: Sonuç",
"chapters": "25 İnteraktif Bölüm"
"chapters": "26 İnteraktif Bölüm"
},
"startReading": "Okumaya Başla",
"skipToChapter1": "1. Bölüme Atla",
@@ -1836,6 +1800,7 @@
"12-handling-edge-cases": "Uç Durumları Ele Alma",
"13-multimodal-prompting": "Çok Modlu Prompting",
"14-context-engineering": "Bağlam Mühendisliği",
"14a-loop-engineering": "Döngü Mühendisliği",
"25-agents-and-skills": "Ajanlar ve Yetenekler",
"15-common-pitfalls": "Yaygın Tuzaklar",
"16-ethics-responsible-use": "Etik ve Sorumlu Kullanım",
@@ -1866,6 +1831,7 @@
"12-handling-edge-cases": "Beklenmedik girdilerle başa çıkma",
"13-multimodal-prompting": "Görüntü, ses ve video ile çalışma",
"14-context-engineering": "RAG, embedding'ler, fonksiyon çağırma ve MCP",
"14a-loop-engineering": "Harekete geçen, doğrulayan, uyum sağlayan ve ne zaman duracağını bilen geri bildirim döngüleri tasarlama",
"25-agents-and-skills": "Yeniden kullanılabilir yetenek paketleriyle AI ajanları oluşturma",
"15-common-pitfalls": "Kaçınılması gereken hatalar",
"16-ethics-responsible-use": "AI'da etik değerlendirmeler",
@@ -2276,5 +2242,12 @@
"submit": "Gönder",
"communityExamples": "Topluluk Örnekleri",
"userExample": "Kullanıcı örneği"
},
"selfHosting": {
"prerequisites": {
"nodeJs": "Node.js 24.x",
"postgresql": "PostgreSQL database",
"npm": "npm"
}
}
}
+13 -40
View File
@@ -1030,45 +1030,8 @@
}
},
"heroIndustries": {
"prefix": "或按行业探索",
"clickToExplore": "点击探索",
"searchPlaceholder": "搜索提示词...",
"teachers": "教师",
"developers": "开发者",
"marketers": "营销人员",
"designers": "设计师",
"writers": "作家",
"analysts": "分析师",
"entrepreneurs": "创业者",
"researchers": "研究员",
"students": "学生",
"consultants": "顾问",
"engineers": "工程师",
"creators": "创作者",
"lawyers": "律师",
"doctors": "医生",
"nurses": "护士",
"accountants": "会计",
"salespeople": "销售",
"recruiters": "招聘官",
"managers": "经理",
"executives": "高管",
"freelancers": "自由职业者",
"photographers": "摄影师",
"musicians": "音乐家",
"artists": "艺术家",
"architects": "建筑师",
"scientists": "科学家",
"journalists": "记者",
"editors": "编辑",
"translators": "翻译",
"coaches": "教练",
"therapists": "治疗师",
"trainers": "培训师",
"chefs": "厨师",
"realtors": "房产经纪",
"investors": "投资者",
"traders": "交易员"
"videoTitle": "GitHub Open Source Friday"
},
"notFound": {
"title": "页面未找到",
@@ -1288,7 +1251,7 @@
"interactiveBanner": {
"badge": "互动版本已上线",
"title": "想要更详细的互动体验?",
"description": "通过我们包含25章内容、实践练习和真实案例的综合互动指南,深入掌握AI提示词技巧。",
"description": "通过我们包含26章内容、实践练习和真实案例的综合互动指南,深入掌握AI提示词技巧。",
"cta": "阅读互动电子书"
},
"generalTips": {
@@ -1489,6 +1452,7 @@
"supportNow": "立即支持",
"techStackTitle": "技术演进",
"coreContributorsTitle": "核心贡献者",
"securityTitle": "安全",
"designCreditsTitle": "设计",
"ideationTitle": "创意",
"communityContributorsTitle": "社区贡献者",
@@ -1779,7 +1743,7 @@
"part4": "第4部分:最佳实践",
"part5": "第5部分:用例",
"part6": "第6部分:结论",
"chapters": "25个互动章节"
"chapters": "26个互动章节"
},
"startReading": "开始阅读",
"skipToChapter1": "跳至第1章",
@@ -1836,6 +1800,7 @@
"12-handling-edge-cases": "处理边界情况",
"13-multimodal-prompting": "多模态提示词",
"14-context-engineering": "上下文工程",
"14a-loop-engineering": "循环工程",
"25-agents-and-skills": "代理和技能",
"15-common-pitfalls": "常见陷阱",
"16-ethics-responsible-use": "伦理和负责任使用",
@@ -1866,6 +1831,7 @@
"12-handling-edge-cases": "处理意外输入",
"13-multimodal-prompting": "处理图像、音频和视频",
"14-context-engineering": "RAG、嵌入、函数调用和MCP",
"14a-loop-engineering": "设计能够行动、验证、调整并知道何时停止的反馈循环",
"25-agents-and-skills": "使用可重用技能包构建AI代理",
"15-common-pitfalls": "要避免的错误",
"16-ethics-responsible-use": "AI中的伦理考虑",
@@ -2265,5 +2231,12 @@
"submit": "提交",
"communityExamples": "社区示例",
"userExample": "用户示例"
},
"selfHosting": {
"prerequisites": {
"nodeJs": "Node.js 24.x",
"postgresql": "PostgreSQL database",
"npm": "npm"
}
}
}
+39 -3
View File
@@ -1,3 +1,4 @@
import { withSentryConfig } from "@sentry/nextjs";
import type { NextConfig } from "next";
import createNextIntlPlugin from "next-intl/plugin";
import createMDX from "@next/mdx";
@@ -9,7 +10,6 @@ const withMDX = createMDX({
const nextConfig: NextConfig = {
pageExtensions: ["js", "jsx", "md", "mdx", "ts", "tsx"],
serverExternalPackages: ["@prisma/client", ".prisma/client", "sharp", "pg", "@prisma/adapter-pg"],
reactCompiler: true,
// Configure webpack for raw imports
webpack: (config) => {
@@ -19,6 +19,8 @@ const nextConfig: NextConfig = {
});
return config;
},
// Enable standalone output for Docker
output: "standalone",
// Experimental features
experimental: {
// Enable server actions
@@ -28,7 +30,6 @@ const nextConfig: NextConfig = {
},
// Image optimization
images: {
unoptimized: true,
remotePatterns: [
{
protocol: "https",
@@ -64,4 +65,39 @@ const nextConfig: NextConfig = {
},
};
export default withMDX(withNextIntl(nextConfig));
export default withSentryConfig(withMDX(withNextIntl(nextConfig)), {
// For all available options, see:
// https://www.npmjs.com/package/@sentry/webpack-plugin#options
org: "promptschat",
project: "prompts-chat",
// Only print logs for uploading source maps in CI
silent: !process.env.CI,
// For all available options, see:
// https://docs.sentry.io/platforms/javascript/guides/nextjs/manual-setup/
// Upload a larger set of source maps for prettier stack traces (increases build time)
widenClientFileUpload: true,
// tunnelRoute removed — was proxying all browser Sentry events through Vercel edge,
// generating unnecessary edge requests ($2.45/M) and function invocations ($0.60/M).
// Estimated savings: $100-400/month. Trade-off: some ad-blockers may block direct Sentry calls.
// See: https://github.com/f/prompts.chat/issues/1085
webpack: {
// Enables automatic instrumentation of Vercel Cron Monitors. (Does not yet work with App Router route handlers.)
// See the following for more information:
// https://docs.sentry.io/product/crons/
// https://vercel.com/docs/cron-jobs
automaticVercelMonitors: true,
// Tree-shaking options for reducing bundle size
treeshake: {
// Automatically tree-shake Sentry logger statements to reduce bundle size
removeDebugLogging: true,
},
},
});
-3
View File
@@ -1,3 +0,0 @@
import { defineCloudflareConfig } from "@opennextjs/cloudflare";
export default defineCloudflareConfig();
+1565 -3802
View File
File diff suppressed because it is too large Load Diff
+1 -12
View File
@@ -8,9 +8,6 @@
"db:deploy": "prisma migrate deploy",
"start": "next start",
"lint": "eslint",
"preview": "opennextjs-cloudflare build && opennextjs-cloudflare preview",
"deploy": "bash scripts/cf-deploy.sh",
"cf-typegen": "wrangler types --env-interface CloudflareEnv cloudflare-env.d.ts",
"db:generate": "prisma generate",
"db:migrate": "prisma migrate dev",
"db:push": "prisma db push",
@@ -40,11 +37,7 @@
"@mdx-js/react": "^3.1.1",
"@modelcontextprotocol/sdk": "^1.24.3",
"@monaco-editor/react": "^4.7.0",
"@neondatabase/serverless": "^1.0.2",
"@next/mdx": "^16.1.1",
"@opennextjs/cloudflare": "^1.17.1",
"@prisma/adapter-neon": "^7.5.0",
"@prisma/adapter-pg": "^7.5.0",
"@prisma/client": "^6.19.0",
"@radix-ui/react-alert-dialog": "^1.1.15",
"@radix-ui/react-avatar": "^1.1.11",
@@ -73,13 +66,11 @@
"date-fns": "^4.1.0",
"jszip": "^3.10.1",
"lucide-react": "^0.556.0",
"monaco-editor": "^0.55.1",
"next": "^16.0.10",
"next-auth": "^5.0.0-beta.30",
"next-intl": "^4.5.8",
"next-themes": "^0.4.6",
"openai": "^6.10.0",
"pg": "^8.20.0",
"pino": "^10.1.0",
"prompts.chat": "^0.0.7",
"react": "19.2.0",
@@ -104,7 +95,6 @@
"@testing-library/user-event": "^14.5.2",
"@types/bcryptjs": "^2.4.6",
"@types/node": "^20",
"@types/pg": "^8.18.0",
"@types/react": "^19",
"@types/react-dom": "^19",
"@vitejs/plugin-react": "^4.3.4",
@@ -121,8 +111,7 @@
"tsx": "^4.21.0",
"tw-animate-css": "^1.4.0",
"typescript": "^5",
"vitest": "^2.1.8",
"wrangler": "^4.75.0"
"vitest": "^2.1.8"
},
"engines": {
"node": "24.x"
+1 -1
View File
@@ -2375,7 +2375,7 @@ import type {
## Requirements
- **Node.js** 18+
- **Node.js** 24.x
- **TypeScript** 5+ (optional, for type checking)
---
@@ -0,0 +1,21 @@
import { describe, expect, it } from 'vitest';
import { buildUrl, codePlatforms } from '../cli/platforms';
describe('platform URL builder', () => {
it('builds VS Code Copilot Chat deep links with encoded prompts', () => {
const vscode = codePlatforms.find((platform) => platform.id === 'vscode');
const insiders = codePlatforms.find((platform) => platform.id === 'vscode-insiders');
expect(vscode).toBeDefined();
expect(insiders).toBeDefined();
expect(vscode?.baseUrl).toBe('vscode://GitHub.Copilot-Chat/chat');
expect(insiders?.baseUrl).toBe('vscode-insiders://GitHub.Copilot-Chat/chat');
expect(buildUrl('vscode', vscode!.baseUrl, 'Review this code & explain it')).toBe(
'vscode://GitHub.Copilot-Chat/chat?prompt=Review%20this%20code%20%26%20explain%20it',
);
expect(buildUrl('vscode-insiders', insiders!.baseUrl, '/fix failing tests')).toBe(
'vscode-insiders://GitHub.Copilot-Chat/chat?prompt=%2Ffix%20failing%20tests',
);
});
});
+1 -1
View File
@@ -2,7 +2,7 @@ import { existsSync, readFileSync, writeFileSync, mkdirSync } from 'fs';
import { homedir } from 'os';
import { join } from 'path';
const PROMPTS_URL = 'https://prompts.chat/prompts.json';
const PROMPTS_URL = 'https://prompts.chat/prompts.json?full_content=true';
const CACHE_DIR = join(homedir(), '.prompts-chat');
const CACHE_FILE = join(CACHE_DIR, 'prompts.json');
@@ -77,7 +77,7 @@ export function PromptDetail({ prompt, onBack, onCopy }: PromptDetailProps) {
const contentHeight = Math.max(terminalHeight - headerLines - footerLines, 5);
useEffect(() => {
const vars = extractVariables(prompt.content);
const vars = extractVariables(prompt.content ?? '');
setVariables(vars);
const defaults: Record<string, string> = {};
@@ -90,7 +90,7 @@ export function PromptDetail({ prompt, onBack, onCopy }: PromptDetailProps) {
const contentLines = useMemo(() => {
if (!prompt) return [];
// Parse escape sequences like \n
const parsedContent = prompt.content.replace(/\\n/g, '\n');
const parsedContent = (prompt.content ?? '').replace(/\\n/g, '\n');
return wrapText(parsedContent, terminalWidth - 6);
}, [prompt, terminalWidth]);
@@ -200,12 +200,12 @@ export function PromptDetail({ prompt, onBack, onCopy }: PromptDetailProps) {
setCurrentVarIndex(0);
setCurrentInput(variableValues[variables[0].name] || '');
} else {
handleCopy(prompt.content);
handleCopy(prompt.content ?? '');
}
}
if (input === 'C' && prompt) {
handleCopy(prompt.content);
handleCopy(prompt.content ?? '');
}
if (input === 'o' && prompt) {
+8 -2
View File
@@ -25,12 +25,13 @@ export const videoPlatforms: Platform[] = [
export const codePlatforms: Platform[] = [
{ id: "windsurf", name: "Windsurf", baseUrl: "windsurf://", isDeeplink: true, supportsQuerystring: false, sponsor: true },
{ id: "vscode", name: "VS Code", baseUrl: "vscode://", isDeeplink: true, supportsQuerystring: false },
{ id: "vscode-insiders", name: "VS Code Insiders", baseUrl: "vscode-insiders://", isDeeplink: true, supportsQuerystring: false },
{ id: "vscode", name: "VS Code", baseUrl: "vscode://GitHub.Copilot-Chat/chat", isDeeplink: true },
{ id: "vscode-insiders", name: "VS Code Insiders", baseUrl: "vscode-insiders://GitHub.Copilot-Chat/chat", isDeeplink: true },
{ id: "cursor", name: "Cursor", baseUrl: "cursor://anysphere.cursor-deeplink/prompt", isDeeplink: true },
{ id: "goose", name: "Goose", baseUrl: "goose://recipe", isDeeplink: true },
{ id: "github-copilot", name: "GitHub Copilot Chat", baseUrl: "https://github.com/copilot" },
{ id: "github-copilot-agents", name: "GitHub Copilot Agents", baseUrl: "https://github.com/copilot/agents" },
{ id: "netlify", name: "Netlify", baseUrl: "https://app.netlify.com/run" },
{ id: "bolt", name: "Bolt", baseUrl: "https://bolt.new" },
{ id: "lovable", name: "Lovable", baseUrl: "https://lovable.dev" },
{ id: "v0", name: "v0", baseUrl: "https://v0.dev/chat" },
@@ -70,6 +71,9 @@ export function buildUrl(
switch (platformId) {
case "cursor":
return `${baseUrl}?text=${encoded}`;
case "vscode":
case "vscode-insiders":
return `${baseUrl}?prompt=${encoded}`;
case "goose": {
const config = JSON.stringify({
version: "1.0.0",
@@ -103,6 +107,8 @@ export function buildUrl(
return `${baseUrl}/?prompt=${encoded}`;
case "lovable":
return `${baseUrl}/?autosubmit=true#prompt=${encoded}`;
case "netlify":
return `${baseUrl}?prompt=${encoded}&ref=prompts-chat`;
case "mistral":
return `${baseUrl}?q=${encoded}`;
case "perplexity":
+15 -4
View File
@@ -175,15 +175,15 @@ export const codePlatforms: Platform[] = [
{
id: "vscode",
name: "VS Code",
baseUrl: "vscode://",
supportsQuerystring: false,
baseUrl: "vscode://GitHub.Copilot-Chat/chat",
supportsQuerystring: true,
isDeeplink: true,
},
{
id: "vscode-insiders",
name: "VS Code Insiders",
baseUrl: "vscode-insiders://",
supportsQuerystring: false,
baseUrl: "vscode-insiders://GitHub.Copilot-Chat/chat",
supportsQuerystring: true,
isDeeplink: true,
},
{
@@ -192,6 +192,12 @@ export const codePlatforms: Platform[] = [
baseUrl: "https://github.com/copilot",
supportsQuerystring: true,
},
{
id: "netlify",
name: "Netlify",
baseUrl: "https://app.netlify.com/run",
supportsQuerystring: true,
},
{
id: "bolt",
name: "Bolt",
@@ -237,6 +243,9 @@ export function buildUrl(
// IDE deeplinks
case "cursor":
return `${baseUrl}?text=${encoded}`;
case "vscode":
case "vscode-insiders":
return `${baseUrl}?prompt=${encoded}`;
case "goose":
case "goose-chat": {
const config = JSON.stringify({
@@ -278,6 +287,8 @@ export function buildUrl(
return `${baseUrl}/?prompt=${encoded}`;
case "lovable":
return `${baseUrl}/?autosubmit=true#prompt=${encoded}`;
case "netlify":
return `${baseUrl}?prompt=${encoded}&ref=prompts-chat`;
case "mistral":
return `${baseUrl}?q=${encoded}`;
case "perplexity":
@@ -0,0 +1,4 @@
-- Add case-insensitive unique indexes to prevent TOCTOU race conditions
-- These ensure the database enforces uniqueness regardless of casing
CREATE UNIQUE INDEX "users_username_ci_unique" ON "users" (LOWER("username"));
CREATE UNIQUE INDEX "users_email_ci_unique" ON "users" (LOWER("email"));
+3 -2
View File
@@ -1,6 +1,5 @@
generator client {
provider = "prisma-client-js"
previewFeatures = ["driverAdapters"]
provider = "prisma-client-js"
}
datasource db {
@@ -140,6 +139,8 @@ model Prompt {
@@index([isPrivate])
@@index([isFeatured])
@@index([isUnlisted])
@@index([slug])
@@index([isPrivate, isUnlisted, deletedAt, createdAt(sort: Desc)])
@@map("prompts")
}
+36 -8
View File
@@ -3,14 +3,15 @@ import bcrypt from "bcryptjs";
const prisma = new PrismaClient();
const PROMPTS_JSON_URL = "https://prompts.chat/prompts.json";
const PROMPTS_JSON_URL = "https://prompts.chat/prompts.json?full_content=true";
interface RemotePrompt {
/** Raw shape returned by the remote API — content may be absent. */
interface RemotePromptRaw {
id: string;
title: string;
slug: string;
description: string | null;
content: string;
content?: string;
type: string;
structuredFormat: string | null;
mediaUrl: string | null;
@@ -52,11 +53,20 @@ interface RemotePrompt {
}>;
}
interface RemotePromptsResponse {
count: number;
prompts: RemotePrompt[];
/** Validated prompt with required content field. */
type RemotePrompt = RemotePromptRaw & { content: string };
/** Type guard that narrows a raw API prompt to a validated RemotePrompt. */
function hasContent(prompt: RemotePromptRaw): prompt is RemotePrompt {
return typeof prompt.content === "string" && prompt.content.length > 0;
}
interface RemotePromptsResponse {
count: number;
prompts: RemotePromptRaw[];
}
/** Fetches all prompts from the remote prompts.chat API with full content. */
async function fetchPrompts(): Promise<RemotePromptsResponse> {
console.log(`📡 Fetching prompts from ${PROMPTS_JSON_URL}...`);
const response = await fetch(PROMPTS_JSON_URL);
@@ -68,12 +78,13 @@ async function fetchPrompts(): Promise<RemotePromptsResponse> {
return data;
}
/** Seeds the database with users, categories, tags, and prompts from prompts.chat. */
async function main() {
console.log("🌱 Seeding database from prompts.chat...");
// Create admin user for assigning prompts
const password = await bcrypt.hash("password123", 12);
const admin = await prisma.user.upsert({
where: { email: "admin@prompts.chat" },
update: {},
@@ -174,7 +185,7 @@ async function main() {
userIdMap.set(username, admin.id);
continue;
}
const user = await prisma.user.upsert({
where: { username },
update: { name: author.name, avatar: author.avatar },
@@ -225,6 +236,13 @@ async function main() {
};
const structuredFormat = remotePrompt.structuredFormat ? formatMap[remotePrompt.structuredFormat] : null;
// Skip prompts without content
if (!hasContent(remotePrompt)) {
console.warn(`⚠ Skipping prompt "${remotePrompt.title}" - no content`);
promptsSkipped++;
continue;
}
// Check if prompt already exists
const existingPrompt = await prisma.prompt.findFirst({
where: { slug: remotePrompt.slug },
@@ -280,6 +298,16 @@ async function main() {
}
console.log(`✅ Created ${promptsCreated} prompts (${promptsSkipped} skipped)`);
// Fail-fast if no prompts were created — likely an upstream API regression
const total = promptsCreated + promptsSkipped;
if (total > 0 && promptsCreated === 0) {
throw new Error(
`Seeding failed: 0 prompts created out of ${total} (${promptsSkipped} skipped). ` +
`This likely indicates an upstream API regression — check that ${PROMPTS_JSON_URL} returns content.`
);
}
console.log("\n🎉 Seeding complete!");
console.log("\n📋 Test credentials (password: password123):");
console.log(" Admin: admin@prompts.chat");
+5 -4
View File
@@ -33,7 +33,7 @@ export default defineConfig({
// Authentication plugins
auth: {
// Available: "credentials" | "google" | "azure" | "github" | "apple" | custom
// Available: "credentials" | "google" | "azure" | "github" | "apple" | "oidc" | "oauth" | custom
// Use `providers` array to enable multiple auth providers
providers: ["github", "google", "apple"],
// Allow public registration (only applies to credentials provider)
@@ -57,11 +57,11 @@ export default defineConfig({
// Enable tags
tags: true,
// Enable AI-powered semantic search (requires OPENAI_API_KEY)
aiSearch: false,
aiSearch: true,
// Enable AI-powered generation features (requires OPENAI_API_KEY)
aiGeneration: false,
aiGeneration: true,
// Enable MCP (Model Context Protocol) features including API key generation
mcp: false,
mcp: true,
// Enable comments on prompts
comments: true,
},
@@ -77,6 +77,7 @@ export default defineConfig({
enabled: !useCloneBranding,
items: [
// Add sponsors here
{ name: "Neon", className: 'py-1', logo: '/sponsors/neon.svg', darkLogo: '/sponsors/neon-dark.svg', url: "https://get.neon.com/VqfnMo4" },
{ name: "Clemta", logo: '/sponsors/clemta.webp', url: "https://clemta.com/?utm_source=prompts.chat" },
{ name: "Wiro.ai", className: 'py-1', darkLogo: '/sponsors/wiro.png', logo: '/sponsors/wiro.png', url: "https://wiro.ai/?utm_source=prompts.chat" },
{ name: "Cognition", logo: "/sponsors/cognition.svg", url: "https://wind.surf/prompts-chat" },
+38005 -1400
View File
File diff suppressed because it is too large Load Diff
+3 -3
View File
@@ -5,7 +5,7 @@
</g>
</g>
<style>
@media (prefers-color-scheme: light) { :root { filter: none; } }
@media (prefers-color-scheme: dark) { :root { filter: invert(100%); } }
path { fill: #000000; }
@media (prefers-color-scheme: dark) { path { fill: #ffffff; } }
</style>
</svg>
</svg>

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 13 KiB

+5
View File
@@ -0,0 +1,5 @@
<svg width="157" height="45" viewBox="0 0 157 45" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M43.9842 0.0123174V44L26.9844 29.2514V44H0.416626V0L43.9842 0.0123174ZM5.75712 38.6595H21.6439V17.5326L38.644 32.5729V5.35124L5.75712 5.34181V38.6595Z" fill="#34D59A"/>
<path d="M79.0701 35.7042L62.1564 20.7349V35.4106H56.8364V9.06775L73.7502 24.037V9.36126H79.0701V35.7042ZM84.9267 35.4106V9.36126H100.85V14.6078H90.2466V19.7443H98.6485V24.8808H90.2466V30.1641H100.85V35.4106H84.9267ZM117.32 35.7042C109.945 35.7042 104.001 29.7605 104.001 22.386C104.001 15.0114 109.945 9.06775 117.32 9.06775C124.694 9.06775 130.638 15.0114 130.638 22.386C130.638 29.7605 124.694 35.7042 117.32 35.7042ZM117.32 30.5677C121.869 30.5677 125.281 26.8987 125.281 22.386C125.281 17.8732 121.869 14.2042 117.32 14.2042C112.77 14.2042 109.358 17.8732 109.358 22.386C109.358 26.8987 112.77 30.5677 117.32 30.5677ZM156.493 35.7042L139.579 20.7349V35.4106H134.259V9.06775L151.173 24.037V9.36126H156.493V35.7042Z" fill="black"/>
<path d="M79.0701 35.7042L62.1564 20.7349V35.4106H56.8364V9.06775L73.7502 24.037V9.36126H79.0701V35.7042ZM84.9267 35.4106V9.36126H100.85V14.6078H90.2466V19.7443H98.6485V24.8808H90.2466V30.1641H100.85V35.4106H84.9267ZM117.32 35.7042C109.945 35.7042 104.001 29.7605 104.001 22.386C104.001 15.0114 109.945 9.06775 117.32 9.06775C124.694 9.06775 130.638 15.0114 130.638 22.386C130.638 29.7605 124.694 35.7042 117.32 35.7042ZM117.32 30.5677C121.869 30.5677 125.281 26.8987 125.281 22.386C125.281 17.8732 121.869 14.2042 117.32 14.2042C112.77 14.2042 109.358 17.8732 109.358 22.386C109.358 26.8987 112.77 30.5677 117.32 30.5677ZM156.493 35.7042L139.579 20.7349V35.4106H134.259V9.06775L151.173 24.037V9.36126H156.493V35.7042Z" fill="white"/>
</svg>

After

Width:  |  Height:  |  Size: 1.7 KiB

+4
View File
@@ -0,0 +1,4 @@
<svg width="157" height="45" viewBox="0 0 157 45" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M43.9842 0.0123174V44L26.9844 29.2514V44H0.416626V0L43.9842 0.0123174ZM5.75712 38.6595H21.6439V17.5326L38.644 32.5729V5.35124L5.75712 5.34181V38.6595Z" fill="#37C38F"/>
<path d="M79.0702 35.7042L62.1565 20.7349V35.4106H56.8365V9.06775L73.7503 24.037V9.36126H79.0702V35.7042ZM84.9267 35.4106V9.36126H100.85V14.6078H90.2467V19.7443H98.6485V24.8808H90.2467V30.1641H100.85V35.4106H84.9267ZM117.32 35.7042C109.945 35.7042 104.001 29.7605 104.001 22.386C104.001 15.0114 109.945 9.06775 117.32 9.06775C124.694 9.06775 130.638 15.0114 130.638 22.386C130.638 29.7605 124.694 35.7042 117.32 35.7042ZM117.32 30.5677C121.869 30.5677 125.281 26.8987 125.281 22.386C125.281 17.8732 121.869 14.2042 117.32 14.2042C112.77 14.2042 109.358 17.8732 109.358 22.386C109.358 26.8987 112.77 30.5677 117.32 30.5677ZM156.493 35.7042L139.579 20.7349V35.4106H134.259V9.06775L151.173 24.037V9.36126H156.493V35.7042Z" fill="black"/>
</svg>

After

Width:  |  Height:  |  Size: 1018 B

+44
View File
@@ -0,0 +1,44 @@
<svg width="240" height="24" viewBox="0 0 240 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M13.4283 0.610352L26.8565 23.8046H0L13.4283 0.610352Z" fill="#fff"/>
<path d="M236.436 22.7547L235.081 17.1148V23.8045H233.849V15.1372H235.557L236.924 20.7405L238.291 15.1372H240V23.8045H238.767V17.1148L237.412 22.7547H236.436Z" fill="#fff"/>
<path d="M226.237 23.8045L228.776 15.1372H230.436L232.974 23.8045H231.644L231.022 21.5462H228.19L227.568 23.8045H226.237ZM229.606 16.4678L228.52 20.362H230.692L229.606 16.4678Z" fill="#fff"/>
<path d="M219.444 23.8045V15.1372H222.142C223.972 15.1372 225.095 16.126 225.095 17.7252C225.095 18.7628 224.436 19.5197 223.631 19.7761C224.485 19.9348 224.9 20.4109 224.973 21.3386L225.193 23.8045H223.911L223.716 21.5828C223.643 20.716 223.301 20.4231 222.239 20.4231H220.726V23.8045H219.444ZM220.726 19.2267H222.117C223.179 19.2267 223.777 18.7018 223.777 17.7862C223.777 16.8585 223.179 16.3458 222.117 16.3458H220.726V19.2267Z" fill="#fff"/>
<path d="M214.957 23.9999C213.09 23.9999 211.748 22.4251 211.748 19.4831C211.748 16.6876 212.956 14.9419 214.994 14.9419C216.63 14.9419 217.704 16.0772 218.082 17.8107L216.752 17.8961C216.508 16.8341 215.934 16.1504 215.006 16.1504C213.774 16.1504 213.078 17.3468 213.078 19.4831C213.078 21.6072 213.798 22.7913 215.067 22.7913C216.178 22.7913 216.861 21.8758 216.91 20.4963H215.006V19.3854H218.094V23.8045H217.057L217.02 22.6937C216.642 23.4749 215.983 23.9999 214.957 23.9999Z" fill="#fff"/>
<path d="M207.651 23.9999C205.589 23.9999 204.429 22.3763 204.429 19.4831C204.429 16.5655 205.589 14.9419 207.651 14.9419C209.714 14.9419 210.873 16.5655 210.873 19.4831C210.873 22.3763 209.714 23.9999 207.651 23.9999ZM207.651 22.8035C208.872 22.8035 209.543 21.6804 209.543 19.4831C209.543 17.2857 208.872 16.1382 207.651 16.1382C206.431 16.1382 205.76 17.2857 205.76 19.4831C205.76 21.6804 206.431 22.8035 207.651 22.8035Z" fill="#fff"/>
<path d="M197.489 23.8045V15.1372H200.187C202.017 15.1372 203.14 16.126 203.14 17.7252C203.14 18.7628 202.481 19.5197 201.676 19.7761C202.53 19.9348 202.945 20.4109 203.018 21.3386L203.238 23.8045H201.956L201.761 21.5828C201.688 20.716 201.346 20.4231 200.284 20.4231H198.771V23.8045H197.489ZM198.771 19.2267H200.162C201.224 19.2267 201.822 18.7018 201.822 17.7862C201.822 16.8585 201.224 16.3458 200.162 16.3458H198.771V19.2267Z" fill="#fff"/>
<path d="M190.403 23.8045V15.1372H193.088C194.894 15.1372 196.09 16.1626 196.09 17.8351C196.09 19.4953 194.894 20.5207 193.088 20.5207H191.684V23.8045H190.403ZM191.684 19.3122H192.954C194.186 19.3122 194.76 18.7995 194.76 17.8351C194.76 16.8707 194.186 16.3458 192.954 16.3458H191.684V19.3122Z" fill="#fff"/>
<path d="M175.791 23.8045V15.1372H181.112V16.3458H177.073V18.8727H180.966V20.0446H177.073V22.596H181.21V23.8045H175.791Z" fill="#fff"/>
<path d="M168.216 23.8045V15.1372H170.914C172.744 15.1372 173.867 16.126 173.867 17.7252C173.867 18.7628 173.208 19.5197 172.403 19.7761C173.257 19.9348 173.672 20.4109 173.745 21.3386L173.965 23.8045H172.683L172.488 21.5828C172.415 20.716 172.073 20.4231 171.011 20.4231H169.498V23.8045H168.216ZM169.498 19.2267H170.889C171.951 19.2267 172.549 18.7018 172.549 17.7862C172.549 16.8585 171.951 16.3458 170.889 16.3458H169.498V19.2267Z" fill="#fff"/>
<path d="M160.374 23.8045L162.912 15.1372H164.572L167.111 23.8045H165.78L165.158 21.5462H162.326L161.704 23.8045H160.374ZM163.742 16.4678L162.656 20.362H164.828L163.742 16.4678Z" fill="#fff"/>
<path d="M154.032 23.8045L153.104 15.1372H154.386L155.045 22.1565L155.862 16.1138H156.985L157.803 22.1565L158.462 15.1372H159.744L158.816 23.8045H157.144L156.424 18.5309L155.704 23.8045H154.032Z" fill="#fff"/>
<path d="M148.471 23.8045V16.3458H145.932V15.1372H152.279V16.3458H149.74V23.8045H148.471Z" fill="#fff"/>
<path d="M139.322 23.8045V15.1372H144.741V16.3213H140.604V18.9826H144.522V20.1545H140.604V23.8045H139.322Z" fill="#fff"/>
<path d="M134.469 23.9999C132.407 23.9999 131.247 22.3763 131.247 19.4831C131.247 16.5655 132.407 14.9419 134.469 14.9419C136.532 14.9419 137.691 16.5655 137.691 19.4831C137.691 22.3763 136.532 23.9999 134.469 23.9999ZM134.469 22.8035C135.69 22.8035 136.361 21.6804 136.361 19.4831C136.361 17.2857 135.69 16.1382 134.469 16.1382C133.249 16.1382 132.577 17.2857 132.577 19.4831C132.577 21.6804 133.249 22.8035 134.469 22.8035Z" fill="#fff"/>
<path d="M127.261 23.9999C125.381 23.9999 124.161 22.8035 124.014 20.9846L125.332 20.8992C125.503 22.1443 126.211 22.8035 127.31 22.8035C128.371 22.8035 128.969 22.3763 128.969 21.6072C128.969 20.8381 128.554 20.3987 126.736 19.8859C124.954 19.3976 124.209 18.7995 124.209 17.4566C124.209 15.9673 125.308 14.9419 127.126 14.9419C128.933 14.9419 129.97 16.0772 130.141 17.7496L128.823 17.8229C128.689 16.8219 128.127 16.1382 127.09 16.1382C126.138 16.1382 125.528 16.6387 125.528 17.3956C125.528 18.1525 125.955 18.4332 127.493 18.8605C129.567 19.4221 130.288 20.1911 130.288 21.6072C130.288 23.0355 129.079 23.9999 127.261 23.9999Z" fill="#fff"/>
<path d="M109.927 23.8045V15.1372H115.248V16.3458H111.208V18.8727H115.102V20.0446H111.208V22.596H115.346V23.8045H109.927Z" fill="#fff"/>
<path d="M105.232 23.9999C103.145 23.9999 101.974 22.2664 101.974 19.4831C101.974 16.6876 103.145 14.9419 105.232 14.9419C106.807 14.9419 107.942 16.0284 108.296 17.9083L106.953 17.9816C106.709 16.773 106.05 16.1382 105.232 16.1382C103.975 16.1382 103.304 17.3468 103.304 19.4831C103.304 21.6072 103.975 22.8035 105.232 22.8035C106.123 22.8035 106.795 22.1077 107.014 20.7893L108.345 20.8503C108.04 22.8279 106.892 23.9999 105.232 23.9999Z" fill="#fff"/>
<path d="M95.0342 23.8045V15.1372H97.7315C99.5622 15.1372 100.685 16.126 100.685 17.7252C100.685 18.7628 100.026 19.5197 99.2205 19.7761C100.075 19.9348 100.49 20.4109 100.563 21.3386L100.783 23.8045H99.5012L99.3059 21.5828C99.2327 20.716 98.891 20.4231 97.8291 20.4231H96.3157V23.8045H95.0342ZM96.3157 19.2267H97.7071C98.7689 19.2267 99.367 18.7018 99.367 17.7862C99.367 16.8585 98.7689 16.3458 97.7071 16.3458H96.3157V19.2267Z" fill="#fff"/>
<path d="M90.5596 23.9999C88.7166 23.9999 87.606 22.8035 87.606 20.7893V15.1372H88.8875V20.8381C88.8875 22.1077 89.4733 22.8035 90.5596 22.8035C91.6458 22.8035 92.2317 22.1077 92.2317 20.8381V15.1372H93.5132V20.7893C93.5132 22.8035 92.4025 23.9999 90.5596 23.9999Z" fill="#fff"/>
<path d="M83.2417 23.9999C81.179 23.9999 80.0195 22.3763 80.0195 19.4831C80.0195 16.5655 81.179 14.9419 83.2417 14.9419C85.3043 14.9419 86.4638 16.5655 86.4638 19.4831C86.4638 22.3763 85.3043 23.9999 83.2417 23.9999ZM83.2417 22.8035C84.4622 22.8035 85.1334 21.6804 85.1334 19.4831C85.1334 17.2857 84.4622 16.1382 83.2417 16.1382C82.0212 16.1382 81.3499 17.2857 81.3499 19.4831C81.3499 21.6804 82.0212 22.8035 83.2417 22.8035Z" fill="#fff"/>
<path d="M76.0332 23.9999C74.1536 23.9999 72.9331 22.8035 72.7866 20.9846L74.1048 20.8992C74.2756 22.1443 74.9835 22.8035 76.082 22.8035C77.1438 22.8035 77.7419 22.3763 77.7419 21.6072C77.7419 20.8381 77.3269 20.3987 75.5083 19.8859C73.7264 19.3976 72.9819 18.7995 72.9819 17.4566C72.9819 15.9673 74.0804 14.9419 75.8989 14.9419C77.7052 14.9419 78.7427 16.0772 78.9135 17.7496L77.5954 17.8229C77.4611 16.8219 76.8997 16.1382 75.8623 16.1382C74.9103 16.1382 74.3 16.6387 74.3 17.3956C74.3 18.1525 74.7272 18.4332 76.265 18.8605C78.3399 19.4221 79.06 20.1911 79.06 21.6072C79.06 23.0355 77.8517 23.9999 76.0332 23.9999Z" fill="#fff"/>
<path d="M58.4556 23.8045V15.1372H60.0178L62.8616 21.9856V15.1372H64.1187V23.8045H62.5564L59.7127 16.9561V23.8045H58.4556Z" fill="#fff"/>
<path d="M51.3813 23.8045V15.1372H56.7027V16.3458H52.6629V18.8727H56.5563V20.0446H52.6629V22.596H56.8004V23.8045H51.3813Z" fill="#fff"/>
<path d="M44.0386 23.8045V15.1372H46.7237C48.53 15.1372 49.7261 16.1626 49.7261 17.8351C49.7261 19.4953 48.53 20.5207 46.7237 20.5207H45.3201V23.8045H44.0386ZM45.3201 19.3122H46.5894C47.8221 19.3122 48.3958 18.7995 48.3958 17.8351C48.3958 16.8707 47.8221 16.3458 46.5894 16.3458H45.3201V19.3122Z" fill="#fff"/>
<path d="M39.332 23.9999C37.2693 23.9999 36.1099 22.3763 36.1099 19.4831C36.1099 16.5655 37.2693 14.9419 39.332 14.9419C41.3946 14.9419 42.5541 16.5655 42.5541 19.4831C42.5541 22.3763 41.3946 23.9999 39.332 23.9999ZM39.332 22.8035C40.5525 22.8035 41.2238 21.6804 41.2238 19.4831C41.2238 17.2857 40.5525 16.1382 39.332 16.1382C38.1115 16.1382 37.4402 17.2857 37.4402 19.4831C37.4402 21.6804 38.1115 22.8035 39.332 22.8035Z" fill="#fff"/>
<path d="M171.085 9.35094C169.083 9.35094 167.96 7.95929 167.96 5.46895C167.96 2.60019 168.864 0.292969 171.414 0.292969C173.013 0.292969 173.819 1.1597 174.148 2.38045L172.83 2.49032C172.659 1.89215 172.269 1.48931 171.414 1.48931C170.243 1.48931 169.474 2.36825 169.303 4.2482C169.718 3.71107 170.426 3.32043 171.329 3.32043C173.05 3.32043 174.161 4.48015 174.161 6.25024C174.161 8.16681 172.916 9.35094 171.085 9.35094ZM171.085 8.1424C172.147 8.1424 172.83 7.45878 172.83 6.27465C172.83 5.17597 172.196 4.48015 171.183 4.48015C170.096 4.48015 169.315 5.17597 169.315 6.27465C169.315 7.34891 169.999 8.1424 171.085 8.1424Z" fill="#fff" fill-opacity="0.5"/>
<path d="M160.667 9.15562C160.667 7.22684 161.387 6.01829 163.925 4.67547C165.011 4.10171 165.475 3.72328 165.475 2.88096C165.475 2.05085 164.95 1.48931 163.937 1.48931C162.827 1.48931 162.217 2.09968 162.046 3.18615L160.715 3.1007C160.898 1.37944 162.021 0.292969 163.937 0.292969C165.78 0.292969 166.806 1.3184 166.806 2.83213C166.806 4.17496 166.22 4.83416 164.45 5.78635C162.949 6.59205 162.241 7.36112 162.192 7.94708H166.818V9.15562H160.667Z" fill="#fff" fill-opacity="0.5"/>
<path d="M156.424 9.35094C154.508 9.35094 153.348 7.61748 153.348 4.83416C153.348 2.03864 154.508 0.292969 156.424 0.292969C158.34 0.292969 159.499 2.03864 159.499 4.83416C159.499 7.61748 158.34 9.35094 156.424 9.35094ZM154.678 4.83416C154.678 5.55441 154.752 6.1892 154.91 6.68971L157.449 1.98981C157.181 1.66021 156.827 1.48931 156.424 1.48931C155.338 1.48931 154.678 2.72226 154.678 4.83416ZM156.424 8.15461C157.51 8.15461 158.169 6.92165 158.169 4.83416C158.169 4.10171 158.096 3.46692 157.937 2.96641L155.386 7.6541C155.667 7.9837 156.021 8.15461 156.424 8.15461Z" fill="#fff" fill-opacity="0.5"/>
<path d="M146.03 9.15562C146.03 7.22684 146.75 6.01829 149.289 4.67547C150.375 4.10171 150.839 3.72328 150.839 2.88096C150.839 2.05085 150.314 1.48931 149.301 1.48931C148.19 1.48931 147.58 2.09968 147.409 3.18615L146.079 3.1007C146.262 1.37944 147.385 0.292969 149.301 0.292969C151.144 0.292969 152.169 1.3184 152.169 2.83213C152.169 4.17496 151.583 4.83416 149.813 5.78635C148.312 6.59205 147.604 7.36112 147.555 7.94708H152.181V9.15562H146.03Z" fill="#fff" fill-opacity="0.5"/>
<path d="M132.041 10.4985L135.727 0H136.899L133.212 10.4985H132.041Z" fill="#fff" fill-opacity="0.5"/>
<path d="M124.722 10.4985L128.409 0H129.581L125.894 10.4985H124.722Z" fill="#fff" fill-opacity="0.5"/>
<path d="M111.684 9.15582V7.54443H113.344V9.15582H111.684Z" fill="#fff"/>
<path d="M105.232 9.35094C103.145 9.35094 101.974 7.61748 101.974 4.83416C101.974 2.03864 103.145 0.292969 105.232 0.292969C106.807 0.292969 107.942 1.37944 108.296 3.25939L106.953 3.33264C106.709 2.1241 106.05 1.48931 105.232 1.48931C103.975 1.48931 103.304 2.69785 103.304 4.83416C103.304 6.95827 103.975 8.15461 105.232 8.15461C106.123 8.15461 106.795 7.45878 107.014 6.14037L108.345 6.20141C108.04 8.17902 106.892 9.35094 105.232 9.35094Z" fill="#fff"/>
<path d="M95.0464 9.15562V0.488281H96.6086L99.4524 7.3367V0.488281H100.71V9.15562H99.1473L96.3035 2.3072V9.15562H95.0464Z" fill="#fff"/>
<path d="M87.8501 9.15562V7.94707H89.9249V1.69683H87.8501V0.488281H93.2691V1.69683H91.1943V7.94707H93.2691V9.15562H87.8501Z" fill="#fff"/>
<path d="M73.4575 9.15562V0.488281H74.739V7.94707H78.8765V9.15562H73.4575Z" fill="#fff"/>
<path d="M66.0171 9.15562V0.488281H71.3385V1.69683H67.2986V4.22378H71.192V5.3957H67.2986V7.94707H71.4361V9.15562H66.0171Z" fill="#fff"/>
<path d="M61.3232 9.35094C59.2361 9.35094 58.0645 7.61748 58.0645 4.83416C58.0645 2.03864 59.2361 0.292969 61.3232 0.292969C62.8976 0.292969 64.0327 1.37944 64.3866 3.25939L63.0441 3.33264C62.8 2.1241 62.1409 1.48931 61.3232 1.48931C60.0661 1.48931 59.3948 2.69785 59.3948 4.83416C59.3948 6.95827 60.0661 8.15461 61.3232 8.15461C62.2142 8.15461 62.8854 7.45878 63.1051 6.14037L64.4355 6.20141C64.1303 8.17902 62.9831 9.35094 61.3232 9.35094Z" fill="#fff"/>
<path d="M51.125 9.15562V0.488281H53.8223C55.6531 0.488281 56.7759 1.47709 56.7759 3.07627C56.7759 4.11391 56.1168 4.87078 55.3113 5.12714C56.1657 5.28583 56.5806 5.76193 56.6539 6.6897L56.8736 9.15562H55.592L55.3968 6.93385C55.3235 6.06711 54.9818 5.77413 53.9199 5.77413H52.4065V9.15562H51.125ZM52.4065 4.5778H53.7979C54.8597 4.5778 55.4578 4.05288 55.4578 3.13731C55.4578 2.20954 54.8597 1.69683 53.7979 1.69683H52.4065V4.5778Z" fill="#fff"/>
<path d="M44.063 9.15562V0.488281H49.3844V1.69683H45.3445V4.22378H49.2379V5.3957H45.3445V7.94707H49.482V9.15562H44.063Z" fill="#fff"/>
<path d="M38.5753 9.15562L36 0.488281H37.3548L39.332 7.44656L41.3092 0.488281H42.6639L40.0887 9.15562H38.5753Z" fill="#fff"/>
</svg>

After

Width:  |  Height:  |  Size: 13 KiB

+44
View File
@@ -0,0 +1,44 @@
<svg width="240" height="24" viewBox="0 0 240 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M13.4283 0.610352L26.8565 23.8046H0L13.4283 0.610352Z" fill="#000"/>
<path d="M236.436 22.7547L235.081 17.1148V23.8045H233.849V15.1372H235.557L236.924 20.7405L238.291 15.1372H240V23.8045H238.767V17.1148L237.412 22.7547H236.436Z" fill="#000"/>
<path d="M226.237 23.8045L228.776 15.1372H230.436L232.974 23.8045H231.644L231.022 21.5462H228.19L227.568 23.8045H226.237ZM229.606 16.4678L228.52 20.362H230.692L229.606 16.4678Z" fill="#000"/>
<path d="M219.444 23.8045V15.1372H222.142C223.972 15.1372 225.095 16.126 225.095 17.7252C225.095 18.7628 224.436 19.5197 223.631 19.7761C224.485 19.9348 224.9 20.4109 224.973 21.3386L225.193 23.8045H223.911L223.716 21.5828C223.643 20.716 223.301 20.4231 222.239 20.4231H220.726V23.8045H219.444ZM220.726 19.2267H222.117C223.179 19.2267 223.777 18.7018 223.777 17.7862C223.777 16.8585 223.179 16.3458 222.117 16.3458H220.726V19.2267Z" fill="#000"/>
<path d="M214.957 23.9999C213.09 23.9999 211.748 22.4251 211.748 19.4831C211.748 16.6876 212.956 14.9419 214.994 14.9419C216.63 14.9419 217.704 16.0772 218.082 17.8107L216.752 17.8961C216.508 16.8341 215.934 16.1504 215.006 16.1504C213.774 16.1504 213.078 17.3468 213.078 19.4831C213.078 21.6072 213.798 22.7913 215.067 22.7913C216.178 22.7913 216.861 21.8758 216.91 20.4963H215.006V19.3854H218.094V23.8045H217.057L217.02 22.6937C216.642 23.4749 215.983 23.9999 214.957 23.9999Z" fill="#000"/>
<path d="M207.651 23.9999C205.589 23.9999 204.429 22.3763 204.429 19.4831C204.429 16.5655 205.589 14.9419 207.651 14.9419C209.714 14.9419 210.873 16.5655 210.873 19.4831C210.873 22.3763 209.714 23.9999 207.651 23.9999ZM207.651 22.8035C208.872 22.8035 209.543 21.6804 209.543 19.4831C209.543 17.2857 208.872 16.1382 207.651 16.1382C206.431 16.1382 205.76 17.2857 205.76 19.4831C205.76 21.6804 206.431 22.8035 207.651 22.8035Z" fill="#000"/>
<path d="M197.489 23.8045V15.1372H200.187C202.017 15.1372 203.14 16.126 203.14 17.7252C203.14 18.7628 202.481 19.5197 201.676 19.7761C202.53 19.9348 202.945 20.4109 203.018 21.3386L203.238 23.8045H201.956L201.761 21.5828C201.688 20.716 201.346 20.4231 200.284 20.4231H198.771V23.8045H197.489ZM198.771 19.2267H200.162C201.224 19.2267 201.822 18.7018 201.822 17.7862C201.822 16.8585 201.224 16.3458 200.162 16.3458H198.771V19.2267Z" fill="#000"/>
<path d="M190.403 23.8045V15.1372H193.088C194.894 15.1372 196.09 16.1626 196.09 17.8351C196.09 19.4953 194.894 20.5207 193.088 20.5207H191.684V23.8045H190.403ZM191.684 19.3122H192.954C194.186 19.3122 194.76 18.7995 194.76 17.8351C194.76 16.8707 194.186 16.3458 192.954 16.3458H191.684V19.3122Z" fill="#000"/>
<path d="M175.791 23.8045V15.1372H181.112V16.3458H177.073V18.8727H180.966V20.0446H177.073V22.596H181.21V23.8045H175.791Z" fill="#000"/>
<path d="M168.216 23.8045V15.1372H170.914C172.744 15.1372 173.867 16.126 173.867 17.7252C173.867 18.7628 173.208 19.5197 172.403 19.7761C173.257 19.9348 173.672 20.4109 173.745 21.3386L173.965 23.8045H172.683L172.488 21.5828C172.415 20.716 172.073 20.4231 171.011 20.4231H169.498V23.8045H168.216ZM169.498 19.2267H170.889C171.951 19.2267 172.549 18.7018 172.549 17.7862C172.549 16.8585 171.951 16.3458 170.889 16.3458H169.498V19.2267Z" fill="#000"/>
<path d="M160.374 23.8045L162.912 15.1372H164.572L167.111 23.8045H165.78L165.158 21.5462H162.326L161.704 23.8045H160.374ZM163.742 16.4678L162.656 20.362H164.828L163.742 16.4678Z" fill="#000"/>
<path d="M154.032 23.8045L153.104 15.1372H154.386L155.045 22.1565L155.862 16.1138H156.985L157.803 22.1565L158.462 15.1372H159.744L158.816 23.8045H157.144L156.424 18.5309L155.704 23.8045H154.032Z" fill="#000"/>
<path d="M148.471 23.8045V16.3458H145.932V15.1372H152.279V16.3458H149.74V23.8045H148.471Z" fill="#000"/>
<path d="M139.322 23.8045V15.1372H144.741V16.3213H140.604V18.9826H144.522V20.1545H140.604V23.8045H139.322Z" fill="#000"/>
<path d="M134.469 23.9999C132.407 23.9999 131.247 22.3763 131.247 19.4831C131.247 16.5655 132.407 14.9419 134.469 14.9419C136.532 14.9419 137.691 16.5655 137.691 19.4831C137.691 22.3763 136.532 23.9999 134.469 23.9999ZM134.469 22.8035C135.69 22.8035 136.361 21.6804 136.361 19.4831C136.361 17.2857 135.69 16.1382 134.469 16.1382C133.249 16.1382 132.577 17.2857 132.577 19.4831C132.577 21.6804 133.249 22.8035 134.469 22.8035Z" fill="#000"/>
<path d="M127.261 23.9999C125.381 23.9999 124.161 22.8035 124.014 20.9846L125.332 20.8992C125.503 22.1443 126.211 22.8035 127.31 22.8035C128.371 22.8035 128.969 22.3763 128.969 21.6072C128.969 20.8381 128.554 20.3987 126.736 19.8859C124.954 19.3976 124.209 18.7995 124.209 17.4566C124.209 15.9673 125.308 14.9419 127.126 14.9419C128.933 14.9419 129.97 16.0772 130.141 17.7496L128.823 17.8229C128.689 16.8219 128.127 16.1382 127.09 16.1382C126.138 16.1382 125.528 16.6387 125.528 17.3956C125.528 18.1525 125.955 18.4332 127.493 18.8605C129.567 19.4221 130.288 20.1911 130.288 21.6072C130.288 23.0355 129.079 23.9999 127.261 23.9999Z" fill="#000"/>
<path d="M109.927 23.8045V15.1372H115.248V16.3458H111.208V18.8727H115.102V20.0446H111.208V22.596H115.346V23.8045H109.927Z" fill="#000"/>
<path d="M105.232 23.9999C103.145 23.9999 101.974 22.2664 101.974 19.4831C101.974 16.6876 103.145 14.9419 105.232 14.9419C106.807 14.9419 107.942 16.0284 108.296 17.9083L106.953 17.9816C106.709 16.773 106.05 16.1382 105.232 16.1382C103.975 16.1382 103.304 17.3468 103.304 19.4831C103.304 21.6072 103.975 22.8035 105.232 22.8035C106.123 22.8035 106.795 22.1077 107.014 20.7893L108.345 20.8503C108.04 22.8279 106.892 23.9999 105.232 23.9999Z" fill="#000"/>
<path d="M95.0342 23.8045V15.1372H97.7315C99.5622 15.1372 100.685 16.126 100.685 17.7252C100.685 18.7628 100.026 19.5197 99.2205 19.7761C100.075 19.9348 100.49 20.4109 100.563 21.3386L100.783 23.8045H99.5012L99.3059 21.5828C99.2327 20.716 98.891 20.4231 97.8291 20.4231H96.3157V23.8045H95.0342ZM96.3157 19.2267H97.7071C98.7689 19.2267 99.367 18.7018 99.367 17.7862C99.367 16.8585 98.7689 16.3458 97.7071 16.3458H96.3157V19.2267Z" fill="#000"/>
<path d="M90.5596 23.9999C88.7166 23.9999 87.606 22.8035 87.606 20.7893V15.1372H88.8875V20.8381C88.8875 22.1077 89.4733 22.8035 90.5596 22.8035C91.6458 22.8035 92.2317 22.1077 92.2317 20.8381V15.1372H93.5132V20.7893C93.5132 22.8035 92.4025 23.9999 90.5596 23.9999Z" fill="#000"/>
<path d="M83.2417 23.9999C81.179 23.9999 80.0195 22.3763 80.0195 19.4831C80.0195 16.5655 81.179 14.9419 83.2417 14.9419C85.3043 14.9419 86.4638 16.5655 86.4638 19.4831C86.4638 22.3763 85.3043 23.9999 83.2417 23.9999ZM83.2417 22.8035C84.4622 22.8035 85.1334 21.6804 85.1334 19.4831C85.1334 17.2857 84.4622 16.1382 83.2417 16.1382C82.0212 16.1382 81.3499 17.2857 81.3499 19.4831C81.3499 21.6804 82.0212 22.8035 83.2417 22.8035Z" fill="#000"/>
<path d="M76.0332 23.9999C74.1536 23.9999 72.9331 22.8035 72.7866 20.9846L74.1048 20.8992C74.2756 22.1443 74.9835 22.8035 76.082 22.8035C77.1438 22.8035 77.7419 22.3763 77.7419 21.6072C77.7419 20.8381 77.3269 20.3987 75.5083 19.8859C73.7264 19.3976 72.9819 18.7995 72.9819 17.4566C72.9819 15.9673 74.0804 14.9419 75.8989 14.9419C77.7052 14.9419 78.7427 16.0772 78.9135 17.7496L77.5954 17.8229C77.4611 16.8219 76.8997 16.1382 75.8623 16.1382C74.9103 16.1382 74.3 16.6387 74.3 17.3956C74.3 18.1525 74.7272 18.4332 76.265 18.8605C78.3399 19.4221 79.06 20.1911 79.06 21.6072C79.06 23.0355 77.8517 23.9999 76.0332 23.9999Z" fill="#000"/>
<path d="M58.4556 23.8045V15.1372H60.0178L62.8616 21.9856V15.1372H64.1187V23.8045H62.5564L59.7127 16.9561V23.8045H58.4556Z" fill="#000"/>
<path d="M51.3813 23.8045V15.1372H56.7027V16.3458H52.6629V18.8727H56.5563V20.0446H52.6629V22.596H56.8004V23.8045H51.3813Z" fill="#000"/>
<path d="M44.0386 23.8045V15.1372H46.7237C48.53 15.1372 49.7261 16.1626 49.7261 17.8351C49.7261 19.4953 48.53 20.5207 46.7237 20.5207H45.3201V23.8045H44.0386ZM45.3201 19.3122H46.5894C47.8221 19.3122 48.3958 18.7995 48.3958 17.8351C48.3958 16.8707 47.8221 16.3458 46.5894 16.3458H45.3201V19.3122Z" fill="#000"/>
<path d="M39.332 23.9999C37.2693 23.9999 36.1099 22.3763 36.1099 19.4831C36.1099 16.5655 37.2693 14.9419 39.332 14.9419C41.3946 14.9419 42.5541 16.5655 42.5541 19.4831C42.5541 22.3763 41.3946 23.9999 39.332 23.9999ZM39.332 22.8035C40.5525 22.8035 41.2238 21.6804 41.2238 19.4831C41.2238 17.2857 40.5525 16.1382 39.332 16.1382C38.1115 16.1382 37.4402 17.2857 37.4402 19.4831C37.4402 21.6804 38.1115 22.8035 39.332 22.8035Z" fill="#000"/>
<path d="M171.085 9.35094C169.083 9.35094 167.96 7.95929 167.96 5.46895C167.96 2.60019 168.864 0.292969 171.414 0.292969C173.013 0.292969 173.819 1.1597 174.148 2.38045L172.83 2.49032C172.659 1.89215 172.269 1.48931 171.414 1.48931C170.243 1.48931 169.474 2.36825 169.303 4.2482C169.718 3.71107 170.426 3.32043 171.329 3.32043C173.05 3.32043 174.161 4.48015 174.161 6.25024C174.161 8.16681 172.916 9.35094 171.085 9.35094ZM171.085 8.1424C172.147 8.1424 172.83 7.45878 172.83 6.27465C172.83 5.17597 172.196 4.48015 171.183 4.48015C170.096 4.48015 169.315 5.17597 169.315 6.27465C169.315 7.34891 169.999 8.1424 171.085 8.1424Z" fill="#000" fill-opacity="0.5"/>
<path d="M160.667 9.15562C160.667 7.22684 161.387 6.01829 163.925 4.67547C165.011 4.10171 165.475 3.72328 165.475 2.88096C165.475 2.05085 164.95 1.48931 163.937 1.48931C162.827 1.48931 162.217 2.09968 162.046 3.18615L160.715 3.1007C160.898 1.37944 162.021 0.292969 163.937 0.292969C165.78 0.292969 166.806 1.3184 166.806 2.83213C166.806 4.17496 166.22 4.83416 164.45 5.78635C162.949 6.59205 162.241 7.36112 162.192 7.94708H166.818V9.15562H160.667Z" fill="#000" fill-opacity="0.5"/>
<path d="M156.424 9.35094C154.508 9.35094 153.348 7.61748 153.348 4.83416C153.348 2.03864 154.508 0.292969 156.424 0.292969C158.34 0.292969 159.499 2.03864 159.499 4.83416C159.499 7.61748 158.34 9.35094 156.424 9.35094ZM154.678 4.83416C154.678 5.55441 154.752 6.1892 154.91 6.68971L157.449 1.98981C157.181 1.66021 156.827 1.48931 156.424 1.48931C155.338 1.48931 154.678 2.72226 154.678 4.83416ZM156.424 8.15461C157.51 8.15461 158.169 6.92165 158.169 4.83416C158.169 4.10171 158.096 3.46692 157.937 2.96641L155.386 7.6541C155.667 7.9837 156.021 8.15461 156.424 8.15461Z" fill="#000" fill-opacity="0.5"/>
<path d="M146.03 9.15562C146.03 7.22684 146.75 6.01829 149.289 4.67547C150.375 4.10171 150.839 3.72328 150.839 2.88096C150.839 2.05085 150.314 1.48931 149.301 1.48931C148.19 1.48931 147.58 2.09968 147.409 3.18615L146.079 3.1007C146.262 1.37944 147.385 0.292969 149.301 0.292969C151.144 0.292969 152.169 1.3184 152.169 2.83213C152.169 4.17496 151.583 4.83416 149.813 5.78635C148.312 6.59205 147.604 7.36112 147.555 7.94708H152.181V9.15562H146.03Z" fill="#000" fill-opacity="0.5"/>
<path d="M132.041 10.4985L135.727 0H136.899L133.212 10.4985H132.041Z" fill="#000" fill-opacity="0.5"/>
<path d="M124.722 10.4985L128.409 0H129.581L125.894 10.4985H124.722Z" fill="#000" fill-opacity="0.5"/>
<path d="M111.684 9.15582V7.54443H113.344V9.15582H111.684Z" fill="#000"/>
<path d="M105.232 9.35094C103.145 9.35094 101.974 7.61748 101.974 4.83416C101.974 2.03864 103.145 0.292969 105.232 0.292969C106.807 0.292969 107.942 1.37944 108.296 3.25939L106.953 3.33264C106.709 2.1241 106.05 1.48931 105.232 1.48931C103.975 1.48931 103.304 2.69785 103.304 4.83416C103.304 6.95827 103.975 8.15461 105.232 8.15461C106.123 8.15461 106.795 7.45878 107.014 6.14037L108.345 6.20141C108.04 8.17902 106.892 9.35094 105.232 9.35094Z" fill="#000"/>
<path d="M95.0464 9.15562V0.488281H96.6086L99.4524 7.3367V0.488281H100.71V9.15562H99.1473L96.3035 2.3072V9.15562H95.0464Z" fill="#000"/>
<path d="M87.8501 9.15562V7.94707H89.9249V1.69683H87.8501V0.488281H93.2691V1.69683H91.1943V7.94707H93.2691V9.15562H87.8501Z" fill="#000"/>
<path d="M73.4575 9.15562V0.488281H74.739V7.94707H78.8765V9.15562H73.4575Z" fill="#000"/>
<path d="M66.0171 9.15562V0.488281H71.3385V1.69683H67.2986V4.22378H71.192V5.3957H67.2986V7.94707H71.4361V9.15562H66.0171Z" fill="#000"/>
<path d="M61.3232 9.35094C59.2361 9.35094 58.0645 7.61748 58.0645 4.83416C58.0645 2.03864 59.2361 0.292969 61.3232 0.292969C62.8976 0.292969 64.0327 1.37944 64.3866 3.25939L63.0441 3.33264C62.8 2.1241 62.1409 1.48931 61.3232 1.48931C60.0661 1.48931 59.3948 2.69785 59.3948 4.83416C59.3948 6.95827 60.0661 8.15461 61.3232 8.15461C62.2142 8.15461 62.8854 7.45878 63.1051 6.14037L64.4355 6.20141C64.1303 8.17902 62.9831 9.35094 61.3232 9.35094Z" fill="#000"/>
<path d="M51.125 9.15562V0.488281H53.8223C55.6531 0.488281 56.7759 1.47709 56.7759 3.07627C56.7759 4.11391 56.1168 4.87078 55.3113 5.12714C56.1657 5.28583 56.5806 5.76193 56.6539 6.6897L56.8736 9.15562H55.592L55.3968 6.93385C55.3235 6.06711 54.9818 5.77413 53.9199 5.77413H52.4065V9.15562H51.125ZM52.4065 4.5778H53.7979C54.8597 4.5778 55.4578 4.05288 55.4578 3.13731C55.4578 2.20954 54.8597 1.69683 53.7979 1.69683H52.4065V4.5778Z" fill="#000"/>
<path d="M44.063 9.15562V0.488281H49.3844V1.69683H45.3445V4.22378H49.2379V5.3957H45.3445V7.94707H49.482V9.15562H44.063Z" fill="#000"/>
<path d="M38.5753 9.15562L36 0.488281H37.3548L39.332 7.44656L41.3092 0.488281H42.6639L40.0887 9.15562H38.5753Z" fill="#000"/>
</svg>

After

Width:  |  Height:  |  Size: 13 KiB

-123
View File
@@ -1,123 +0,0 @@
#!/bin/bash
set -e
echo "🚀 Cloudflare Workers Deploy Script"
echo "======================================"
PROJECT_ROOT="$(cd "$(dirname "$0")/.." && pwd)"
cd "$PROJECT_ROOT"
SERVER_DIR=".open-next/server-functions/default"
# --- Step 1: Build with OpenNext ---
echo ""
echo "📦 Step 1: Building with OpenNext..."
CLOUDFLARE=1 npx opennextjs-cloudflare build
# --- Step 2: Post-build cleanup ---
echo ""
echo "📦 Step 2: Post-build patches..."
# --- Step 2b: Patch handler.mjs for Next.js 16 compat ---
# OpenNext's loadManifest throws on manifests it doesn't recognize.
# Next.js 16 adds new manifests (prefetch-hints, subresource-integrity, fallback-build).
# Patch: return {} for unknown manifests instead of throwing.
HANDLER="$SERVER_DIR/handler.mjs"
if grep -q 'Unexpected loadManifest' "$HANDLER"; then
sed -i '' 's|throw new Error(`Unexpected loadManifest(${path2}) call!`)|return{}|' "$HANDLER"
echo " ✅ Patched loadManifest to handle unknown Next.js 16 manifests"
fi
# --- Step 3: Stub heavy WASM/binary files to reduce bundle size ---
echo ""
echo "📦 Step 3: Stubbing heavy WASM files..."
# handler.mjs references files with absolute paths, causing wrangler's
# module collector to resolve them as: <server_dir>/<absolute_path>.
# We create stubs at both the normal and doubled path locations.
stub_wasm_file() {
local REL_PATH="$1"
local NORMAL="$SERVER_DIR/$REL_PATH"
local DOUBLED="$SERVER_DIR$PROJECT_ROOT/$SERVER_DIR/$REL_PATH"
for TARGET in "$NORMAL" "$DOUBLED"; do
mkdir -p "$(dirname "$TARGET")"
printf '\x00asm\x01\x00\x00\x00' > "$TARGET"
done
}
stub_empty_file() {
local REL_PATH="$1"
local NORMAL="$SERVER_DIR/$REL_PATH"
local DOUBLED="$SERVER_DIR$PROJECT_ROOT/$SERVER_DIR/$REL_PATH"
for TARGET in "$NORMAL" "$DOUBLED"; do
mkdir -p "$(dirname "$TARGET")"
: > "$TARGET"
done
}
# Stub @vercel/og WASM + fonts (saves ~1.5 MiB gzipped)
# Stub in .open-next bundle
stub_wasm_file "node_modules/next/dist/compiled/@vercel/og/resvg.wasm"
stub_empty_file "node_modules/next/dist/compiled/@vercel/og/Geist-Regular.ttf.bin"
stub_empty_file "node_modules/next/dist/compiled/@vercel/og/Geist-SemiBold.ttf.bin"
# Also stub in project root node_modules (wrangler resolves from here too)
REAL_RESVG="$PROJECT_ROOT/node_modules/next/dist/compiled/@vercel/og/resvg.wasm"
if [ -f "$REAL_RESVG" ] && [ "$(wc -c < "$REAL_RESVG")" -gt 100 ]; then
cp "$REAL_RESVG" "$REAL_RESVG.bak"
printf '\x00asm\x01\x00\x00\x00' > "$REAL_RESVG"
fi
echo " ✅ Stubbed @vercel/og WASM + fonts"
# Keep Prisma WASM query engine (needed for query compilation with driver adapters)
# Aggressively clean @prisma to fit within 10 MiB:
PRISMA_RUNTIME="$SERVER_DIR/node_modules/@prisma/client/runtime"
PRISMA_CLIENT="$SERVER_DIR/node_modules/@prisma/client"
if [ -d "$PRISMA_RUNTIME" ]; then
# Remove non-PostgreSQL engines
find "$PRISMA_RUNTIME" -name "*cockroachdb*" -delete 2>/dev/null
find "$PRISMA_RUNTIME" -name "*mysql*" -delete 2>/dev/null
find "$PRISMA_RUNTIME" -name "*sqlite*" -delete 2>/dev/null
find "$PRISMA_RUNTIME" -name "*sqlserver*" -delete 2>/dev/null
# Remove source maps (not needed at runtime)
find "$PRISMA_RUNTIME" -name "*.js.map" -delete 2>/dev/null
find "$PRISMA_RUNTIME" -name "*.mjs.map" -delete 2>/dev/null
# Remove duplicate .mjs versions of base64 WASM (keep only .js)
rm -f "$PRISMA_RUNTIME"/query_engine_bg.postgresql.wasm-base64.mjs 2>/dev/null
rm -f "$PRISMA_RUNTIME"/query_compiler_bg.postgresql.wasm-base64.mjs 2>/dev/null
# Remove query compiler WASM (only query engine is needed for driver adapters)
rm -f "$PRISMA_RUNTIME"/query_compiler_bg.postgresql.wasm-base64.js 2>/dev/null
# Remove unused runtimes (we only use wasm-engine-edge)
rm -f "$PRISMA_RUNTIME"/binary.js "$PRISMA_RUNTIME"/binary.mjs 2>/dev/null
rm -f "$PRISMA_RUNTIME"/library.js "$PRISMA_RUNTIME"/library.mjs 2>/dev/null
rm -f "$PRISMA_RUNTIME"/react-native.js 2>/dev/null
rm -f "$PRISMA_RUNTIME"/wasm-compiler-edge.js "$PRISMA_RUNTIME"/wasm-compiler-edge.mjs 2>/dev/null
rm -f "$PRISMA_RUNTIME"/edge-esm.js 2>/dev/null
rm -f "$PRISMA_RUNTIME"/index-browser.js "$PRISMA_RUNTIME"/index-browser.mjs 2>/dev/null
rm -f "$PRISMA_RUNTIME"/client.js "$PRISMA_RUNTIME"/client.mjs 2>/dev/null
# Remove generator-build (not needed at runtime)
rm -rf "$PRISMA_CLIENT/generator-build" 2>/dev/null
echo " ✅ Cleaned Prisma: kept only PostgreSQL WASM engine + wasm-engine-edge runtime"
fi
# --- Step 4: Check bundle size ---
echo ""
echo "📦 Step 4: Checking bundle size..."
npx wrangler deploy --dry-run --outdir /tmp/cf-dry-run 2>&1 | grep "Total Upload" || true
# --- Step 5: Deploy ---
echo ""
echo "📦 Step 5: Deploying to Cloudflare Workers..."
npx opennextjs-cloudflare deploy
# --- Step 6: Restore stubbed files in project root ---
REAL_RESVG="$PROJECT_ROOT/node_modules/next/dist/compiled/@vercel/og/resvg.wasm"
if [ -f "$REAL_RESVG.bak" ]; then
mv "$REAL_RESVG.bak" "$REAL_RESVG"
echo " ✅ Restored project root resvg.wasm"
fi
echo ""
echo "✅ Deploy complete!"
+218 -307
View File
@@ -39,377 +39,288 @@ python3 << 'PYTHON_SCRIPT'
import csv
import subprocess
import os
import io
import sys
import re
# Increase CSV field size limit to handle large prompt content
csv.field_size_limit(sys.maxsize)
project_dir = os.environ.get('PROJECT_DIR', '.')
csv_file = os.path.join(project_dir, 'prompts.csv')
remote_csv = os.path.join(project_dir, 'prompts.csv.remote')
prompts_md_path = os.path.join(project_dir, 'PROMPTS.md')
# Read existing local prompts (by act title as key)
local_prompts = {}
fieldnames = None
skipped_local = 0
with open(csv_file, 'r', newline='', encoding='utf-8') as f:
# Normalize CRLF to LF
content = f.read().replace('\r\n', '\n').replace('\r', '\n')
reader = csv.DictReader(io.StringIO(content))
fieldnames = reader.fieldnames
for row in reader:
try:
act = row.get('act', '').strip()
if act:
local_prompts[act] = row
except csv.Error as e:
skipped_local += 1
print(f"Skipping local row due to CSV error: {e}")
# --- CSV I/O (ordered, roundtrip-safe) ---
print(f"Found {len(local_prompts)} existing local prompts" + (f" (skipped {skipped_local})" if skipped_local else ""))
def read_csv(path):
"""Read CSV into an ordered list of rows and an act->index map."""
rows = []
index = {}
skipped = 0
with open(path, 'r', newline='', encoding='utf-8') as f:
reader = csv.DictReader(f)
fieldnames = list(reader.fieldnames) if reader.fieldnames else []
while True:
try:
row = next(reader)
act = (row.get('act') or '').strip()
if act:
index[act] = len(rows)
rows.append(row)
except csv.Error as e:
skipped += 1
print(f"Skipping row due to CSV error: {e}")
except StopIteration:
break
return rows, index, fieldnames, skipped
# Read remote prompts (normalize CRLF to LF)
remote_prompts = []
skipped_remote = 0
with open(remote_csv, 'r', newline='', encoding='utf-8') as f:
content = f.read().replace('\r\n', '\n').replace('\r', '\n')
reader = csv.DictReader(io.StringIO(content))
remote_fieldnames = reader.fieldnames
while True:
try:
row = next(reader)
remote_prompts.append(row)
except csv.Error as e:
skipped_remote += 1
print(f"Skipping remote row due to CSV error: {e}")
except StopIteration:
break
def write_csv(rows, fieldnames, path):
"""Write CSV deterministically — unchanged rows produce identical bytes."""
with open(path, 'w', newline='', encoding='utf-8') as f:
writer = csv.DictWriter(f, fieldnames=fieldnames)
writer.writeheader()
for row in rows:
writer.writerow(row)
print(f"Found {len(remote_prompts)} remote prompts" + (f" (skipped {skipped_remote})" if skipped_remote else ""))
def rebuild_index(rows):
"""Rebuild the act->index map after mutations."""
return {(r.get('act') or '').strip(): i for i, r in enumerate(rows)}
# Use remote fieldnames if local is empty
if not fieldnames:
fieldnames = remote_fieldnames
def normalize(s):
"""Normalize a string for comparison only."""
return (s or '').replace('\r\n', '\n').replace('\r', '\n').strip()
# Build set of remote prompt acts for quick lookup
remote_acts = set()
for row in remote_prompts:
act = row.get('act', '').strip()
if act:
remote_acts.add(act)
# --- Contributor helpers ---
# Find new, updated, and deleted prompts
new_prompts = []
updated_prompts = []
deleted_prompts = []
# Check for new and updated
for row in remote_prompts:
act = row.get('act', '').strip()
if not act:
continue
if act not in local_prompts:
new_prompts.append(row)
else:
local_row = local_prompts[act]
# Check if content OR contributors changed
content_changed = row.get('prompt', '').strip() != local_row.get('prompt', '').strip()
contributors_changed = row.get('contributor', '').strip() != local_row.get('contributor', '').strip()
if content_changed or contributors_changed:
updated_prompts.append((row, local_row))
# Check for deleted (in local but not in remote)
for act, local_row in local_prompts.items():
if act not in remote_acts:
deleted_prompts.append(local_row)
print(f"Found {len(new_prompts)} new prompts to add")
print(f"Found {len(updated_prompts)} updated prompts to modify")
print(f"Found {len(deleted_prompts)} prompts to remove (unlisted/deleted)")
# Helper function to parse contributors (supports "user1,user2,user3" format)
def parse_contributors(contributor_field):
"""Parse contributor field, returns (primary_author, co_authors_list)"""
if not contributor_field:
def parse_contributors(field):
if not field:
return 'anonymous', []
# Split by comma and clean up
contributors = [c.strip() for c in contributor_field.split(',') if c.strip()]
if not contributors:
parts = [c.strip() for c in field.split(',') if c.strip()]
if not parts:
return 'anonymous', []
primary = contributors[0]
co_authors = contributors[1:] if len(contributors) > 1 else []
return primary, co_authors
return parts[0], parts[1:]
def build_commit_message(action, act, co_authors):
"""Build commit message with optional co-author trailers"""
def make_email(name):
"""Build an email — don't double-suffix if the contributor is already an email."""
if '@' in name:
return name
return f'{name}@users.noreply.github.com'
def build_commit_msg(action, act, co_authors):
msg = f'{action} prompt: {act}'
if co_authors:
msg += '\n\n'
for co_author in co_authors:
co_email = f"{co_author}@users.noreply.github.com"
msg += f'Co-authored-by: {co_author} <{co_email}>\n'
for ca in co_authors:
msg += f'Co-authored-by: {ca} <{make_email(ca)}>\n'
return msg
def git_commit(author_name, author_email, message):
"""Stage CSV + PROMPTS.md and commit if there are real changes. Returns True if committed."""
subprocess.run(['git', 'add', csv_file, prompts_md_path], check=True)
if subprocess.run(['git', 'diff', '--cached', '--quiet'], capture_output=True).returncode == 0:
return False
env = os.environ.copy()
env['GIT_AUTHOR_NAME'] = author_name
env['GIT_AUTHOR_EMAIL'] = author_email
env['GIT_COMMITTER_NAME'] = author_name
env['GIT_COMMITTER_EMAIL'] = author_email
subprocess.run([
'git', 'commit', '-m', message,
f'--author={author_name} <{author_email}>'
], env=env, check=True)
return True
# --- PROMPTS.md helpers ---
EMAIL_RE = re.compile(r'^[^@\s]+@[^@\s]+\.[^@\s]+$')
GITHUB_USERNAME_RE = re.compile(r'^[A-Za-z0-9](?:[A-Za-z0-9]|-(?=[A-Za-z0-9])){0,38}$')
def format_contributor_links(contributor_field):
"""Format contributors as GitHub profile links"""
if not contributor_field:
return '@anonymous'
contributors = [c.strip() for c in contributor_field.split(',') if c.strip()]
if not contributors:
return '@anonymous'
return ', '.join([f'[@{c}](https://github.com/{c})' for c in contributors])
links = []
for contributor in contributors:
normalized = contributor.lstrip('@')
if EMAIL_RE.match(normalized):
links.append('@anonymous')
elif GITHUB_USERNAME_RE.match(normalized):
links.append(f'[@{normalized}](https://github.com/{normalized})')
elif normalized:
links.append(f'@{normalized}')
return ', '.join(links) if links else '@anonymous'
def generate_prompt_block(row):
"""Generate a single prompt's <details> block"""
act = row.get('act', 'Untitled')
prompt = row.get('prompt', '')
contributor = row.get('contributor', '')
prompt_type = row.get('type', 'TEXT').upper()
# Determine code block language based on type
if prompt_type == 'TEXT':
lang = 'md'
elif prompt_type == 'JSON':
lang = 'json'
elif prompt_type == 'YAML':
lang = 'yaml'
else:
lang = 'md'
contributor_links = format_contributor_links(contributor)
block = f'<details>\n'
block += f'<summary><strong>{act}</strong></summary>\n\n'
block += f'## {act}\n\n'
block += f'Contributed by {contributor_links}\n\n'
block += f'```{lang}\n'
block += f'{prompt}\n'
block += f'```\n\n'
block += f'</details>\n\n'
return block
prompt_type = (row.get('type') or 'TEXT').upper()
def init_prompts_md(prompts_md_path):
"""Initialize PROMPTS.md with header if it doesn't exist"""
lang = {'TEXT': 'md', 'JSON': 'json', 'YAML': 'yaml'}.get(prompt_type, 'md')
contributor_links = format_contributor_links(contributor)
return (
f'<details>\n'
f'<summary><strong>{act}</strong></summary>\n\n'
f'## {act}\n\n'
f'Contributed by {contributor_links}\n\n'
f'```{lang}\n'
f'{prompt}\n'
f'```\n\n'
f'</details>\n\n'
)
def init_prompts_md():
if not os.path.exists(prompts_md_path):
with open(prompts_md_path, 'w', encoding='utf-8') as f:
f.write('# prompts.chat\n\n')
f.write('> A curated list of prompts for ChatGPT and other AI models.\n\n')
f.write('---\n\n')
def append_prompt_to_md(row, prompts_md_path):
"""Append a new prompt block to PROMPTS.md"""
init_prompts_md(prompts_md_path)
block = generate_prompt_block(row)
def append_prompt_to_md(row):
init_prompts_md()
with open(prompts_md_path, 'a', encoding='utf-8') as f:
f.write(block)
f.write(generate_prompt_block(row))
def update_prompt_in_md(row, prompts_md_path):
"""Update an existing prompt's block in PROMPTS.md"""
def update_prompt_in_md(row):
act = row.get('act', '')
if not os.path.exists(prompts_md_path):
append_prompt_to_md(row, prompts_md_path)
append_prompt_to_md(row)
return
with open(prompts_md_path, 'r', encoding='utf-8') as f:
content = f.read()
# Find and replace the specific prompt block using regex
import re
# Pattern to match the entire <details> block for this prompt
pattern = rf'<details>\n<summary><strong>{re.escape(act)}</strong></summary>.*?</details>\n\n'
new_block = generate_prompt_block(row)
new_content, count = re.subn(pattern, new_block, content, flags=re.DOTALL)
new_content, count = re.subn(pattern, generate_prompt_block(row), content, flags=re.DOTALL)
if count > 0:
with open(prompts_md_path, 'w', encoding='utf-8') as f:
f.write(new_content)
else:
# Prompt not found, append it
append_prompt_to_md(row, prompts_md_path)
append_prompt_to_md(row)
def remove_prompt_from_md(act, prompts_md_path):
"""Remove a prompt's block from PROMPTS.md"""
def remove_prompt_from_md(act):
if not os.path.exists(prompts_md_path):
return
with open(prompts_md_path, 'r', encoding='utf-8') as f:
content = f.read()
import re
pattern = rf'<details>\n<summary><strong>{re.escape(act)}</strong></summary>.*?</details>\n\n'
new_content = re.sub(pattern, '', content, flags=re.DOTALL)
with open(prompts_md_path, 'w', encoding='utf-8') as f:
f.write(new_content)
prompts_md_path = os.path.join(project_dir, 'PROMPTS.md')
# --- Main ---
local_rows, local_index, fieldnames, skipped_l = read_csv(csv_file)
remote_rows, remote_index, remote_fieldnames, skipped_r = read_csv(remote_csv)
if not fieldnames:
fieldnames = remote_fieldnames
print(f"Local: {len(local_rows)} prompts" + (f" (skipped {skipped_l})" if skipped_l else ""))
print(f"Remote: {len(remote_rows)} prompts" + (f" (skipped {skipped_r})" if skipped_r else ""))
# Compute diffs
remote_acts = set(remote_index.keys())
new_prompts = []
updated_prompts = []
deleted_prompts = []
for row in remote_rows:
act = (row.get('act') or '').strip()
if not act:
continue
if act not in local_index:
new_prompts.append(row)
else:
local_row = local_rows[local_index[act]]
if (normalize(row.get('prompt')) != normalize(local_row.get('prompt')) or
normalize(row.get('contributor')) != normalize(local_row.get('contributor'))):
updated_prompts.append(row)
for act in list(local_index):
if act not in remote_acts:
deleted_prompts.append(local_rows[local_index[act]])
print(f"\nNew: {len(new_prompts)}, Updated: {len(updated_prompts)}, Deleted: {len(deleted_prompts)}")
if not new_prompts and not updated_prompts and not deleted_prompts:
print("\nNo CSV changes detected. Already up to date!")
else:
# Process updates one at a time (apply and commit each update separately)
if updated_prompts:
print("\nApplying updates to existing prompts...")
for i, (remote_row, local_row) in enumerate(updated_prompts, 1):
act = remote_row.get('act', '').strip()
contributor_field = remote_row.get('contributor', '').strip()
# Update this specific prompt in local_prompts
local_prompts[act] = remote_row
# Rewrite the CSV with this update applied
with open(csv_file, 'w', newline='') as f:
writer = csv.DictWriter(f, fieldnames=fieldnames)
writer.writeheader()
# Write in order of remote (to maintain order)
for row in remote_prompts:
row_act = row.get('act', '').strip()
if row_act in local_prompts:
writer.writerow(local_prompts[row_act])
# Update only this prompt's block in PROMPTS.md
update_prompt_in_md(remote_row, prompts_md_path)
primary_author, co_authors = parse_contributors(contributor_field)
email = f"{primary_author}@users.noreply.github.com"
subprocess.run(['git', 'add', csv_file, prompts_md_path], check=True)
# Check if there are actual changes to commit
diff_result = subprocess.run(['git', 'diff', '--cached', '--quiet'], capture_output=True)
if diff_result.returncode == 0:
# No changes staged, skip this commit
print(f"[UPDATE {i}/{len(updated_prompts)}] {act} - no changes, skipping")
continue
env = os.environ.copy()
env['GIT_AUTHOR_NAME'] = primary_author
env['GIT_AUTHOR_EMAIL'] = email
env['GIT_COMMITTER_NAME'] = primary_author
env['GIT_COMMITTER_EMAIL'] = email
commit_msg = build_commit_message('Update', act, co_authors)
subprocess.run([
'git', 'commit',
'-m', commit_msg,
f'--author={primary_author} <{email}>'
], env=env, check=True)
co_authors_str = f" (+ {', '.join(co_authors)})" if co_authors else ""
print(f"[UPDATE {i}/{len(updated_prompts)}] {primary_author}{co_authors_str}: {act}")
# Process new prompts
if new_prompts:
print("\nCreating commits for new prompts...")
for i, row in enumerate(new_prompts, 1):
contributor_field = row.get('contributor', '').strip()
act = row.get('act', 'Unknown')
primary_author, co_authors = parse_contributors(contributor_field)
email = f"{primary_author}@users.noreply.github.com"
# Append this row to the CSV
with open(csv_file, 'a', newline='') as f:
writer = csv.DictWriter(f, fieldnames=fieldnames)
writer.writerow(row)
# Track in local_prompts
local_prompts[act] = row
# Append only this prompt's block to PROMPTS.md
append_prompt_to_md(row, prompts_md_path)
# Stage and commit
subprocess.run(['git', 'add', csv_file, prompts_md_path], check=True)
# Check if there are actual changes to commit
diff_result = subprocess.run(['git', 'diff', '--cached', '--quiet'], capture_output=True)
if diff_result.returncode == 0:
print(f"[NEW {i}/{len(new_prompts)}] {act} - no changes, skipping")
continue
env = os.environ.copy()
env['GIT_AUTHOR_NAME'] = primary_author
env['GIT_AUTHOR_EMAIL'] = email
env['GIT_COMMITTER_NAME'] = primary_author
env['GIT_COMMITTER_EMAIL'] = email
commit_msg = build_commit_message('Add', act, co_authors)
subprocess.run([
'git', 'commit',
'-m', commit_msg,
f'--author={primary_author} <{email}>'
], env=env, check=True)
co_authors_str = f" (+ {', '.join(co_authors)})" if co_authors else ""
print(f"[NEW {i}/{len(new_prompts)}] {primary_author}{co_authors_str}: {act}")
# Process deleted prompts (remove from CSV, commit with original author)
if deleted_prompts:
print("\nRemoving unlisted/deleted prompts...")
for i, row in enumerate(deleted_prompts, 1):
contributor_field = row.get('contributor', '').strip()
act = row.get('act', 'Unknown')
primary_author, co_authors = parse_contributors(contributor_field)
email = f"{primary_author}@users.noreply.github.com"
# Remove this prompt from local_prompts
if act in local_prompts:
del local_prompts[act]
# Rewrite CSV without the deleted prompt
with open(csv_file, 'w', newline='') as f:
writer = csv.DictWriter(f, fieldnames=fieldnames)
writer.writeheader()
for remaining_act, remaining_row in local_prompts.items():
writer.writerow(remaining_row)
# Remove only this prompt's block from PROMPTS.md
remove_prompt_from_md(act, prompts_md_path)
# Stage and commit
subprocess.run(['git', 'add', csv_file, prompts_md_path], check=True)
# Check if there are actual changes to commit
diff_result = subprocess.run(['git', 'diff', '--cached', '--quiet'], capture_output=True)
if diff_result.returncode == 0:
print(f"[REMOVE {i}/{len(deleted_prompts)}] {act} - no changes, skipping")
continue
env = os.environ.copy()
env['GIT_AUTHOR_NAME'] = primary_author
env['GIT_AUTHOR_EMAIL'] = email
env['GIT_COMMITTER_NAME'] = primary_author
env['GIT_COMMITTER_EMAIL'] = email
commit_msg = build_commit_message('Remove', act, co_authors)
subprocess.run([
'git', 'commit',
'-m', commit_msg,
f'--author={primary_author} <{email}>'
], env=env, check=True)
co_authors_str = f" (+ {', '.join(co_authors)})" if co_authors else ""
print(f"[REMOVE {i}/{len(deleted_prompts)}] {primary_author}{co_authors_str}: {act}")
print(f"\nDone! Created {len(new_prompts)} new, {len(updated_prompts)} update, {len(deleted_prompts)} remove commits.")
print("Already up to date!")
sys.exit(0)
counts = {'add': 0, 'update': 0, 'remove': 0}
# 1) Deletes — remove one row at a time, keeping other rows untouched
if deleted_prompts:
print("\nRemoving unlisted/deleted prompts...")
for i, row in enumerate(deleted_prompts, 1):
act = (row.get('act') or '').strip()
contributor = (row.get('contributor') or '').strip()
primary, coauthors = parse_contributors(contributor)
email = make_email(primary)
if act in local_index:
local_rows.pop(local_index[act])
local_index = rebuild_index(local_rows)
remove_prompt_from_md(act)
write_csv(local_rows, fieldnames, csv_file)
msg = build_commit_msg('Remove', act, coauthors)
if git_commit(primary, email, msg):
ca = f" (+ {', '.join(coauthors)})" if coauthors else ""
print(f" [{i}/{len(deleted_prompts)}] {primary}{ca}: {act}")
counts['remove'] += 1
else:
print(f" [{i}/{len(deleted_prompts)}] {act} — no changes, skipping")
# 2) Updates — replace only the specific row in-place
if updated_prompts:
print("\nUpdating existing prompts...")
for i, row in enumerate(updated_prompts, 1):
act = (row.get('act') or '').strip()
contributor = (row.get('contributor') or '').strip()
primary, coauthors = parse_contributors(contributor)
email = make_email(primary)
if act in local_index:
local_rows[local_index[act]] = row
update_prompt_in_md(row)
write_csv(local_rows, fieldnames, csv_file)
msg = build_commit_msg('Update', act, coauthors)
if git_commit(primary, email, msg):
ca = f" (+ {', '.join(coauthors)})" if coauthors else ""
print(f" [{i}/{len(updated_prompts)}] {primary}{ca}: {act}")
counts['update'] += 1
else:
print(f" [{i}/{len(updated_prompts)}] {act} — no changes, skipping")
# 3) New prompts — append one at a time
if new_prompts:
print("\nAdding new prompts...")
for i, row in enumerate(new_prompts, 1):
act = (row.get('act') or '').strip()
contributor = (row.get('contributor') or '').strip()
primary, coauthors = parse_contributors(contributor)
email = make_email(primary)
local_rows.append(row)
local_index[act] = len(local_rows) - 1
append_prompt_to_md(row)
write_csv(local_rows, fieldnames, csv_file)
msg = build_commit_msg('Add', act, coauthors)
if git_commit(primary, email, msg):
ca = f" (+ {', '.join(coauthors)})" if coauthors else ""
print(f" [{i}/{len(new_prompts)}] {primary}{ca}: {act}")
counts['add'] += 1
else:
print(f" [{i}/{len(new_prompts)}] {act} — no changes, skipping")
print(f"\nDone! {counts['add']} added, {counts['update']} updated, {counts['remove']} removed.")
PYTHON_SCRIPT
PYTHON_EXIT=$?
+1 -1
View File
@@ -12,7 +12,7 @@ Sentry.init({
enabled: process.env.NODE_ENV === "production",
// Define how likely traces are sampled. Adjust this value in production, or use tracesSampler for greater control.
tracesSampleRate: 1,
tracesSampleRate: 0.1,
// Enable logs to be sent to Sentry
enableLogs: true,
+1 -1
View File
@@ -11,7 +11,7 @@ Sentry.init({
enabled: process.env.NODE_ENV === "production",
// Define how likely traces are sampled. Adjust this value in production, or use tracesSampler for greater control.
tracesSampleRate: 1,
tracesSampleRate: 0.1,
// Enable logs to be sent to Sentry
enableLogs: true,
+187
View File
@@ -0,0 +1,187 @@
import { describe, it, expect, vi, beforeEach } from "vitest";
import type { NextApiRequest, NextApiResponse } from "next";
// Mock all heavy dependencies before importing handler
vi.mock("@/lib/db", () => ({
db: {
user: { findUnique: vi.fn() },
prompt: { findMany: vi.fn(), findFirst: vi.fn(), create: vi.fn() },
tag: { findUnique: vi.fn(), create: vi.fn() },
$queryRaw: vi.fn(),
},
}));
vi.mock("@/lib/rate-limit", () => ({
mcpGeneralLimiter: { check: vi.fn().mockReturnValue({ allowed: true }) },
mcpToolCallLimiter: { check: vi.fn().mockReturnValue({ allowed: true }) },
mcpWriteToolLimiter: { check: vi.fn().mockReturnValue({ allowed: true }) },
mcpAiToolLimiter: { check: vi.fn().mockReturnValue({ allowed: true }) },
}));
vi.mock("@/../prompts.config", () => ({
default: {
features: { mcp: true },
},
}));
vi.mock("@/lib/api-key", () => ({
isValidApiKeyFormat: vi.fn().mockReturnValue(false),
}));
vi.mock("@/lib/skill-files", () => ({
parseSkillFiles: vi.fn(),
serializeSkillFiles: vi.fn(),
sanitizeFilename: vi.fn(),
DEFAULT_SKILL_FILE: "main.md",
}));
function createMockReq(method: string, overrides: Partial<NextApiRequest> = {}): NextApiRequest {
return {
method,
headers: {},
url: "/api/mcp",
socket: { remoteAddress: "127.0.0.1" },
...overrides,
} as unknown as NextApiRequest;
}
function createMockRes(): NextApiResponse & {
_status: number;
_json: unknown;
_headers: Record<string, string>;
_ended: boolean;
} {
const res = {
_status: 200,
_json: null,
_headers: {} as Record<string, string>,
_ended: false,
status(code: number) {
res._status = code;
return res;
},
json(data: unknown) {
res._json = data;
return res;
},
end() {
res._ended = true;
return res;
},
setHeader(key: string, value: string) {
res._headers[key] = value;
return res;
},
getHeader(key: string) {
return res._headers[key];
},
headersSent: false,
on: vi.fn(),
};
return res as unknown as NextApiResponse & typeof res;
}
describe("MCP API handler - HTTP method routing", () => {
let handler: (req: NextApiRequest, res: NextApiResponse) => Promise<void>;
beforeEach(async () => {
vi.clearAllMocks();
// Dynamic import to pick up mocks
const mod = await import("@/pages/api/mcp");
handler = mod.default;
});
describe("GET requests", () => {
it("should return 405 Method Not Allowed per MCP Streamable HTTP spec", async () => {
const req = createMockReq("GET");
const res = createMockRes();
await handler(req, res);
expect(res._status).toBe(405);
});
it("should return JSON-RPC error body", async () => {
const req = createMockReq("GET");
const res = createMockRes();
await handler(req, res);
expect(res._json).toEqual({
jsonrpc: "2.0",
error: expect.objectContaining({
code: -32000,
message: expect.stringContaining("Method not allowed"),
}),
id: null,
});
});
it("should set Cache-Control: no-store to prevent caching stale 405s", async () => {
const req = createMockReq("GET");
const res = createMockRes();
await handler(req, res);
expect(res._headers["Cache-Control"]).toBe("no-store");
});
});
describe("DELETE requests", () => {
it("should return 204 No Content", async () => {
const req = createMockReq("DELETE");
const res = createMockRes();
await handler(req, res);
expect(res._status).toBe(204);
expect(res._ended).toBe(true);
});
});
describe("unsupported methods", () => {
it("should return 405 for PUT", async () => {
const req = createMockReq("PUT");
const res = createMockRes();
await handler(req, res);
expect(res._status).toBe(405);
});
it("should return 405 for PATCH", async () => {
const req = createMockReq("PATCH");
const res = createMockRes();
await handler(req, res);
expect(res._status).toBe(405);
});
});
describe("MCP disabled", () => {
it("should return 404 when MCP feature is disabled", async () => {
// Re-mock config with mcp disabled
vi.doMock("@/../prompts.config", () => ({
default: { features: { mcp: false } },
}));
// Re-import to get new mock
vi.resetModules();
const mod = await import("@/pages/api/mcp");
const disabledHandler = mod.default;
const req = createMockReq("GET");
const res = createMockRes();
await disabledHandler(req, res);
expect(res._status).toBe(404);
// Restore original mock
vi.doMock("@/../prompts.config", () => ({
default: { features: { mcp: true } },
}));
});
});
});
+120 -17
View File
@@ -1,4 +1,5 @@
import { describe, it, expect, vi, beforeEach } from "vitest";
import { Prisma } from "@prisma/client";
import { POST } from "@/app/api/auth/register/route";
import { db } from "@/lib/db";
import { getConfig } from "@/lib/config";
@@ -158,14 +159,15 @@ describe("POST /api/auth/register", () => {
});
describe("duplicate checks", () => {
it("should return 400 when email already exists", async () => {
// Mock: email check finds existing user
vi.mocked(db.user.findUnique).mockImplementation(async (args) => {
if (args?.where?.email) {
return { id: "1", email: "test@example.com" } as never;
}
return null;
});
it("should return 409 when email already exists", async () => {
// Mock: create throws P2002 unique violation on email
vi.mocked(db.user.create).mockRejectedValue(
new Prisma.PrismaClientKnownRequestError("Unique constraint failed", {
code: "P2002",
meta: { target: ["email"] },
clientVersion: "5.0.0",
})
);
const request = createRequest({
name: "Test User",
@@ -177,14 +179,43 @@ describe("POST /api/auth/register", () => {
const response = await POST(request);
const data = await response.json();
expect(response.status).toBe(400);
expect(response.status).toBe(409);
expect(data.error).toBe("email_taken");
});
it("should return 400 when username already exists", async () => {
// Mock: email check passes, username check (case-insensitive via findFirst) finds existing user
vi.mocked(db.user.findUnique).mockResolvedValue(null);
vi.mocked(db.user.findFirst).mockResolvedValue({ id: "1", username: "testuser" } as never);
it("should return 409 for case-insensitive email collision", async () => {
// Mock: create throws P2002 unique violation on CI email index
vi.mocked(db.user.create).mockRejectedValue(
new Prisma.PrismaClientKnownRequestError("Unique constraint failed", {
code: "P2002",
meta: { target: ["users_email_ci_unique"] },
clientVersion: "5.0.0",
})
);
const request = createRequest({
name: "Test User",
username: "testuser",
email: "Test@Example.COM",
password: "password123",
});
const response = await POST(request);
const data = await response.json();
expect(response.status).toBe(409);
expect(data.error).toBe("email_taken");
});
it("should return 409 when username already exists", async () => {
// Mock: create throws P2002 unique violation on username
vi.mocked(db.user.create).mockRejectedValue(
new Prisma.PrismaClientKnownRequestError("Unique constraint failed", {
code: "P2002",
meta: { target: ["username"] },
clientVersion: "5.0.0",
})
);
const request = createRequest({
name: "Test User",
@@ -196,15 +227,52 @@ describe("POST /api/auth/register", () => {
const response = await POST(request);
const data = await response.json();
expect(response.status).toBe(409);
expect(data.error).toBe("username_taken");
});
it("should return 400 for uppercase username", async () => {
const request = createRequest({
name: "Test User",
username: "TestUser",
email: "test@example.com",
password: "password123",
});
const response = await POST(request);
const data = await response.json();
expect(response.status).toBe(400);
expect(data.error).toBe("validation_error");
});
it("should return 409 for case-insensitive username collision", async () => {
// Mock: create throws P2002 unique violation on CI username index
vi.mocked(db.user.create).mockRejectedValue(
new Prisma.PrismaClientKnownRequestError("Unique constraint failed", {
code: "P2002",
meta: { target: ["users_username_ci_unique"] },
clientVersion: "5.0.0",
})
);
const request = createRequest({
name: "Test User",
username: "testuser",
email: "test@example.com",
password: "password123",
});
const response = await POST(request);
const data = await response.json();
expect(response.status).toBe(409);
expect(data.error).toBe("username_taken");
});
});
describe("successful registration", () => {
it("should create user and return user data", async () => {
vi.mocked(db.user.findUnique).mockResolvedValue(null);
vi.mocked(db.user.findFirst).mockResolvedValue(null);
vi.mocked(db.user.create).mockResolvedValue({
id: "user-123",
name: "Test User",
@@ -238,9 +306,44 @@ describe("POST /api/auth/register", () => {
expect(data.password).toBeUndefined(); // Password should not be returned
});
it("should lowercase and trim email and username before saving", async () => {
vi.mocked(db.user.create).mockResolvedValue({
id: "user-123",
name: "Test User",
username: "testuser",
email: "test@example.com",
password: "hashed_password",
emailVerified: null,
image: null,
role: "USER",
bio: null,
credits: 0,
createdAt: new Date(),
updatedAt: new Date(),
});
const request = createRequest({
name: " Test User ",
username: " testuser ",
email: " Test@Example.COM ",
password: "password123",
});
const response = await POST(request);
expect(response.status).toBe(200);
expect(db.user.create).toHaveBeenCalledWith(
expect.objectContaining({
data: expect.objectContaining({
name: "Test User",
username: "testuser",
email: "test@example.com",
}),
})
);
});
it("should accept valid username with underscores", async () => {
vi.mocked(db.user.findUnique).mockResolvedValue(null);
vi.mocked(db.user.findFirst).mockResolvedValue(null);
vi.mocked(db.user.create).mockResolvedValue({
id: "user-123",
name: "Test User",
+36 -7
View File
@@ -1,4 +1,5 @@
import { describe, it, expect, vi, beforeEach } from "vitest";
import { Prisma } from "@prisma/client";
import { GET, PATCH } from "@/app/api/user/profile/route";
import { db } from "@/lib/db";
import { auth } from "@/lib/auth";
@@ -8,6 +9,7 @@ vi.mock("@/lib/db", () => ({
db: {
user: {
findUnique: vi.fn(),
findFirst: vi.fn(),
update: vi.fn(),
},
},
@@ -160,9 +162,15 @@ describe("PATCH /api/user/profile", () => {
expect(data.error).toBe("validation_error");
});
it("should return 400 if username is taken", async () => {
it("should return 409 if username is taken", async () => {
vi.mocked(auth).mockResolvedValue({ user: { id: "user1", username: "olduser" } } as never);
vi.mocked(db.user.findUnique).mockResolvedValue({ id: "other-user" } as never);
vi.mocked(db.user.update).mockRejectedValue(
new Prisma.PrismaClientKnownRequestError("Unique constraint failed", {
code: "P2002",
meta: { target: ["username"] },
clientVersion: "5.0.0",
})
);
const request = new Request("http://localhost:3000/api/user/profile", {
method: "PATCH",
@@ -172,7 +180,29 @@ describe("PATCH /api/user/profile", () => {
const response = await PATCH(request);
const data = await response.json();
expect(response.status).toBe(400);
expect(response.status).toBe(409);
expect(data.error).toBe("username_taken");
});
it("should return 409 for case-insensitive username collision", async () => {
vi.mocked(auth).mockResolvedValue({ user: { id: "user1", username: "olduser" } } as never);
vi.mocked(db.user.update).mockRejectedValue(
new Prisma.PrismaClientKnownRequestError("Unique constraint failed", {
code: "P2002",
meta: { target: ["users_username_ci_unique"] },
clientVersion: "5.0.0",
})
);
const request = new Request("http://localhost:3000/api/user/profile", {
method: "PATCH",
body: JSON.stringify({ name: "Test", username: "takenuser" }),
});
const response = await PATCH(request);
const data = await response.json();
expect(response.status).toBe(409);
expect(data.error).toBe("username_taken");
});
@@ -196,13 +226,12 @@ describe("PATCH /api/user/profile", () => {
expect(response.status).toBe(200);
expect(data.name).toBe("Updated Name");
// Should NOT check for existing username when keeping the same one
expect(db.user.findUnique).not.toHaveBeenCalled();
// No pre-check needed — uniqueness enforced at DB level
expect(db.user.update).toHaveBeenCalled();
});
it("should update profile successfully", async () => {
vi.mocked(auth).mockResolvedValue({ user: { id: "user1", username: "olduser" } } as never);
vi.mocked(db.user.findUnique).mockResolvedValue(null); // Username not taken
vi.mocked(db.user.update).mockResolvedValue({
id: "user1",
name: "New Name",
@@ -318,7 +347,7 @@ describe("PATCH /api/user/profile", () => {
it("should accept valid username with underscores", async () => {
vi.mocked(auth).mockResolvedValue({ user: { id: "user1", username: "old" } } as never);
vi.mocked(db.user.findUnique).mockResolvedValue(null);
vi.mocked(db.user.findFirst).mockResolvedValue(null);
vi.mocked(db.user.update).mockResolvedValue({
id: "user1",
name: "Test",
+16
View File
@@ -29,6 +29,10 @@ describe("GET /api/prompts/[id]/versions", () => {
});
it("should return empty array for prompt with no versions", async () => {
vi.mocked(db.prompt.findUnique).mockResolvedValue({
isPrivate: false,
authorId: "user1",
} as never);
vi.mocked(db.promptVersion.findMany).mockResolvedValue([]);
const request = new Request("http://localhost:3000/api/prompts/123/versions");
@@ -42,6 +46,10 @@ describe("GET /api/prompts/[id]/versions", () => {
});
it("should return versions ordered by version desc", async () => {
vi.mocked(db.prompt.findUnique).mockResolvedValue({
isPrivate: false,
authorId: "user1",
} as never);
vi.mocked(db.promptVersion.findMany).mockResolvedValue([
{
id: "v3",
@@ -83,6 +91,10 @@ describe("GET /api/prompts/[id]/versions", () => {
});
it("should include author info in response", async () => {
vi.mocked(db.prompt.findUnique).mockResolvedValue({
isPrivate: false,
authorId: "user1",
} as never);
vi.mocked(db.promptVersion.findMany).mockResolvedValue([
{
id: "v1",
@@ -106,6 +118,10 @@ describe("GET /api/prompts/[id]/versions", () => {
});
it("should call findMany with correct parameters", async () => {
vi.mocked(db.prompt.findUnique).mockResolvedValue({
isPrivate: false,
authorId: "user1",
} as never);
vi.mocked(db.promptVersion.findMany).mockResolvedValue([]);
const request = new Request("http://localhost:3000/api/prompts/123/versions");
@@ -0,0 +1,141 @@
import { describe, it, expect, beforeEach, afterEach } from "vitest";
import { getProviderMetadata, getConfiguredProviderIds } from "@/lib/auth/provider-metadata";
type ConfigParam = Parameters<typeof getConfiguredProviderIds>[0];
describe("Provider Metadata", () => {
const originalEnv = process.env;
beforeEach(() => {
process.env = { ...originalEnv };
});
afterEach(() => {
process.env = originalEnv;
});
describe("getProviderMetadata", () => {
it("should return empty maps when no generic providers are requested", () => {
const result = getProviderMetadata(["github", "google"]);
expect(result.displayNames).toEqual({});
expect(result.logos).toEqual({});
});
it("should read OIDC display name and logo from env", () => {
process.env.AUTH_OIDC_NAME = "Corporate SSO";
process.env.AUTH_OIDC_LOGO = "https://example.com/logo.svg";
const result = getProviderMetadata(["github", "oidc"]);
expect(result.displayNames).toEqual({ oidc: "Corporate SSO" });
expect(result.logos).toEqual({ oidc: "https://example.com/logo.svg" });
});
it("should read OAuth display name and logo from env", () => {
process.env.AUTH_OAUTH_NAME = "Legacy IdP";
process.env.AUTH_OAUTH_LOGO = "https://idp.example.com/icon.png";
const result = getProviderMetadata(["oauth"]);
expect(result.displayNames).toEqual({ oauth: "Legacy IdP" });
expect(result.logos).toEqual({ oauth: "https://idp.example.com/icon.png" });
});
it("should return both OIDC and OAuth metadata when both are configured", () => {
process.env.AUTH_OIDC_NAME = "OIDC Provider";
process.env.AUTH_OIDC_LOGO = "https://oidc.example.com/logo.svg";
process.env.AUTH_OAUTH_NAME = "OAuth Provider";
process.env.AUTH_OAUTH_LOGO = "https://oauth.example.com/logo.svg";
const result = getProviderMetadata(["oidc", "oauth"]);
expect(result.displayNames).toEqual({
oidc: "OIDC Provider",
oauth: "OAuth Provider",
});
expect(result.logos).toEqual({
oidc: "https://oidc.example.com/logo.svg",
oauth: "https://oauth.example.com/logo.svg",
});
});
it("should omit name when env var is not set", () => {
process.env.AUTH_OIDC_LOGO = "https://example.com/logo.svg";
// AUTH_OIDC_NAME not set
const result = getProviderMetadata(["oidc"]);
expect(result.displayNames).toEqual({});
expect(result.logos).toEqual({ oidc: "https://example.com/logo.svg" });
});
it("should omit logo when env var is not set", () => {
process.env.AUTH_OIDC_NAME = "My Provider";
// AUTH_OIDC_LOGO not set
const result = getProviderMetadata(["oidc"]);
expect(result.displayNames).toEqual({ oidc: "My Provider" });
expect(result.logos).toEqual({});
});
it("should reject logo URLs with javascript: protocol", () => {
process.env.AUTH_OIDC_NAME = "Evil Provider";
process.env.AUTH_OIDC_LOGO = "javascript:alert('xss')";
const result = getProviderMetadata(["oidc"]);
expect(result.displayNames).toEqual({ oidc: "Evil Provider" });
expect(result.logos).toEqual({});
});
it("should reject logo URLs with data: protocol", () => {
process.env.AUTH_OIDC_LOGO = "data:image/svg+xml,<svg></svg>";
const result = getProviderMetadata(["oidc"]);
expect(result.logos).toEqual({});
});
it("should accept http:// logo URLs", () => {
process.env.AUTH_OIDC_LOGO = "http://internal.corp.com/logo.png";
const result = getProviderMetadata(["oidc"]);
expect(result.logos).toEqual({ oidc: "http://internal.corp.com/logo.png" });
});
it("should reject malformed URLs", () => {
process.env.AUTH_OIDC_LOGO = "not-a-url";
const result = getProviderMetadata(["oidc"]);
expect(result.logos).toEqual({});
});
});
describe("getConfiguredProviderIds", () => {
it("should return providers array when configured", () => {
const config = {
auth: { providers: ["github", "google", "oidc"], allowRegistration: false },
} as unknown as ConfigParam;
expect(getConfiguredProviderIds(config)).toEqual(["github", "google", "oidc"]);
});
it("should fallback to deprecated singular provider string if present", () => {
const config = {
auth: { provider: "github", allowRegistration: false },
} as unknown as ConfigParam;
expect(getConfiguredProviderIds(config)).toEqual(["github"]);
});
it("should default to credentials when providers array is empty", () => {
const config = {
auth: { providers: [], allowRegistration: false },
} as unknown as ConfigParam;
expect(getConfiguredProviderIds(config)).toEqual(["credentials"]);
});
it("should default to credentials when providers is not set", () => {
const config = {
auth: { allowRegistration: false },
} as unknown as ConfigParam;
expect(getConfiguredProviderIds(config)).toEqual(["credentials"]);
});
});
});
@@ -0,0 +1,132 @@
/* eslint-disable @typescript-eslint/no-explicit-any -- tests inspect the dynamic NextAuth provider object */
import { describe, it, expect, beforeEach, afterEach } from "vitest";
import { oauthPlugin } from "@/lib/plugins/auth/oauth";
describe("OAuth 2.0 Auth Plugin", () => {
const originalEnv = process.env;
beforeEach(() => {
process.env = { ...originalEnv };
process.env.AUTH_OAUTH_ID = "test-client-id";
process.env.AUTH_OAUTH_SECRET = "test-client-secret";
process.env.AUTH_OAUTH_ISSUER = "https://sso.test.com";
process.env.AUTH_OAUTH_NAME = "Test OAuth";
});
afterEach(() => {
process.env = originalEnv;
});
it("should have correct plugin id and name", () => {
expect(oauthPlugin.id).toBe("oauth");
expect(oauthPlugin.name).toBe("Generic OAuth 2.0");
});
it("should have PKCE enabled by default", () => {
const provider: any = oauthPlugin.getProvider();
expect(provider.checks).toBeUndefined(); // Enabled by default
});
it("should allow disabling PKCE explicitly", () => {
process.env.AUTH_OAUTH_ENABLE_PKCE = "false";
const provider: any = oauthPlugin.getProvider();
expect(provider.checks).toEqual(["state"]);
});
it("should configure standard OAuth provider dynamically from env", () => {
process.env.AUTH_OAUTH_ID = "test-client-id";
process.env.AUTH_OAUTH_SECRET = "test-client-secret";
process.env.AUTH_OAUTH_ISSUER = "https://sso.test.com";
const provider: any = oauthPlugin.getProvider();
expect(provider.id).toBe("oauth");
expect(provider.type).toBe("oauth");
expect(provider.clientId).toBe("test-client-id");
expect(provider.clientSecret).toBe("test-client-secret");
expect(provider.issuer).toBe("https://sso.test.com");
// Check fallback URLs derived from issuer
expect(provider.authorization.url).toBe("https://sso.test.com/authorize");
expect(provider.token).toBe("https://sso.test.com/token");
expect(provider.userinfo).toBe("https://sso.test.com/userinfo");
// Check default scope (should NOT include openid for relaxed OAuth)
expect(provider.authorization.params.scope).toBe("email profile");
});
it("should use explicit URL overrides when provided", () => {
process.env.AUTH_OAUTH_ID = "test-client-id";
process.env.AUTH_OAUTH_SECRET = "test-client-secret";
process.env.AUTH_OAUTH_ISSUER = "https://sso.test.com";
process.env.AUTH_OAUTH_AUTHORIZATION_URL = "https://custom.test.com/auth";
process.env.AUTH_OAUTH_TOKEN_URL = "https://custom.test.com/token";
process.env.AUTH_OAUTH_USERINFO_URL = "https://custom.test.com/me";
const provider: any = oauthPlugin.getProvider();
expect(provider.authorization.url).toBe("https://custom.test.com/auth");
expect(provider.token).toBe("https://custom.test.com/token");
expect(provider.userinfo).toBe("https://custom.test.com/me");
});
it("should handle wellknown discovery correctly", () => {
process.env.AUTH_OAUTH_ID = "test-client-id";
process.env.AUTH_OAUTH_SECRET = "test-client-secret";
process.env.AUTH_OAUTH_ISSUER = "https://sso.test.com";
process.env.AUTH_OAUTH_WELLKNOWN = "https://sso.test.com/.well-known";
const provider: any = oauthPlugin.getProvider();
expect(provider.wellKnown).toBe("https://sso.test.com/.well-known");
expect(provider.authorization.url).toBeUndefined(); // Let wellKnown handle it
expect(provider.token).toBeUndefined();
expect(provider.userinfo).toBeUndefined();
});
it("should handle custom style logo", () => {
process.env.AUTH_OAUTH_LOGO = "https://logo.com/image.png";
const provider: any = oauthPlugin.getProvider();
expect(provider.style?.logo).toBe("https://logo.com/image.png");
});
it("should process user profile mappings correctly", () => {
const provider: any = oauthPlugin.getProvider();
const mockProfile = {
sub: "12345",
name: "Test User",
email: "test@example.com",
picture: "https://avatar.com/me.png",
preferred_username: "testuser"
};
const parsedProfile = provider.profile(mockProfile);
expect(parsedProfile.id).toBe("12345");
expect(parsedProfile.name).toBe("Test User");
expect(parsedProfile.email).toBe("test@example.com");
expect(parsedProfile.image).toBe("https://avatar.com/me.png");
expect(parsedProfile.username).toBe("testuser");
});
it("should fallback correctly if standard profile fields are missing", () => {
const provider: any = oauthPlugin.getProvider();
const weirdProfile = {
id: 999, // Testing numeric ID coercion
email: "weird@example.com",
avatar_url: "https://avatar.com/me2.png"
};
const parsedProfile = provider.profile(weirdProfile);
expect(parsedProfile.id).toBe("999");
expect(parsedProfile.name).toBe("weird@example.com"); // Fallback to email
expect(parsedProfile.email).toBe("weird@example.com");
expect(parsedProfile.image).toBe("https://avatar.com/me2.png");
expect(parsedProfile.username).toBe("weird"); // Fallback to email prefix
});
});
@@ -0,0 +1,96 @@
/* eslint-disable @typescript-eslint/no-explicit-any -- tests inspect the dynamic NextAuth provider object */
import { describe, it, expect, beforeEach, afterEach } from "vitest";
import { oidcPlugin } from "@/lib/plugins/auth/oidc";
describe("OpenID Connect Auth Plugin", () => {
const originalEnv = process.env;
beforeEach(() => {
process.env = { ...originalEnv };
process.env.AUTH_OIDC_ID = "test-client-id";
process.env.AUTH_OIDC_SECRET = "test-client-secret";
process.env.AUTH_OIDC_ISSUER = "https://sso.test.com";
process.env.AUTH_OIDC_NAME = "Test OIDC";
});
afterEach(() => {
process.env = originalEnv;
});
it("should have correct plugin id and name", () => {
expect(oidcPlugin.id).toBe("oidc");
expect(oidcPlugin.name).toBe("Generic OIDC");
});
it("should configure standard OIDC provider dynamically from env", () => {
process.env.AUTH_OIDC_ID = "test-client-id";
process.env.AUTH_OIDC_SECRET = "test-client-secret";
process.env.AUTH_OIDC_ISSUER = "https://sso.test.com";
const provider: any = oidcPlugin.getProvider();
expect(provider.id).toBe("oidc");
expect(provider.type).toBe("oidc");
expect(provider.clientId).toBe("test-client-id");
expect(provider.clientSecret).toBe("test-client-secret");
expect(provider.issuer).toBe("https://sso.test.com");
expect(provider.wellKnown).toBe("https://sso.test.com/.well-known/openid-configuration");
});
it("should support well-known discovery override", () => {
process.env.AUTH_OIDC_ISSUER = "https://sso.test.com";
process.env.AUTH_OIDC_WELLKNOWN = "https://sso.test.com/custom-well-known";
const provider: any = oidcPlugin.getProvider();
expect(provider.wellKnown).toBe("https://sso.test.com/custom-well-known");
});
it("should have PKCE enabled by default", () => {
delete process.env.AUTH_OIDC_ENABLE_PKCE;
const provider: any = oidcPlugin.getProvider();
expect(provider.checks).toBeUndefined(); // Enabled by default
});
it("should apply PKCE bypass if explicitly disabled", () => {
process.env.AUTH_OIDC_ENABLE_PKCE = "false";
const provider: any = oidcPlugin.getProvider();
expect(provider.checks).toEqual(["state"]);
});
it("should keep PKCE enabled if explicitly turned on", () => {
process.env.AUTH_OIDC_ENABLE_PKCE = "true";
const provider: any = oidcPlugin.getProvider();
expect(provider.checks).toBeUndefined(); // Auth.js will handle PKCE natively
});
it("should handle custom style logo", () => {
process.env.AUTH_OIDC_LOGO = "https://logo.com/image.png";
const provider: any = oidcPlugin.getProvider();
expect(provider.style?.logo).toBe("https://logo.com/image.png");
});
it("should fall back to standard UserInfo fields correctly", () => {
process.env.AUTH_OIDC_ID = "test-client-id";
process.env.AUTH_OIDC_SECRET = "test-client-secret";
process.env.AUTH_OIDC_ISSUER = "https://sso.test.com";
const provider: any = oidcPlugin.getProvider();
const mockProfile = {
sub: "12345",
name: "Test User",
email: "test@example.com",
picture: "https://avatar.com/me.png",
preferred_username: "testuser"
};
const parsedProfile: any = provider.profile(mockProfile);
expect(parsedProfile.id).toBe("12345");
expect(parsedProfile.name).toBe("Test User");
expect(parsedProfile.email).toBe("test@example.com");
expect(parsedProfile.image).toBe("https://avatar.com/me.png");
expect(parsedProfile.username).toBe("testuser");
});
});
+108
View File
@@ -0,0 +1,108 @@
import { describe, it, expect, vi, beforeEach } from "vitest";
import { canViewPrompt, checkPromptAccess } from "@/lib/prompt-access";
import { auth } from "@/lib/auth";
import type { Session } from "next-auth";
vi.mock("@/lib/auth", () => ({
auth: vi.fn(),
}));
describe("canViewPrompt", () => {
it("should return false for null prompt", () => {
expect(canViewPrompt(null, null)).toBe(false);
});
it("should return true for public prompt with no session", () => {
expect(
canViewPrompt({ isPrivate: false, authorId: "user1" }, null)
).toBe(true);
});
it("should return true for public prompt with any session", () => {
const session = { user: { id: "other" } } as Session;
expect(
canViewPrompt({ isPrivate: false, authorId: "user1" }, session)
).toBe(true);
});
it("should return false for private prompt with no session", () => {
expect(
canViewPrompt({ isPrivate: true, authorId: "user1" }, null)
).toBe(false);
});
it("should return false for private prompt when user is not owner", () => {
const session = { user: { id: "other", role: "USER" } } as Session;
expect(
canViewPrompt({ isPrivate: true, authorId: "user1" }, session)
).toBe(false);
});
it("should return true for private prompt when user is the owner", () => {
const session = { user: { id: "user1", role: "USER" } } as Session;
expect(
canViewPrompt({ isPrivate: true, authorId: "user1" }, session)
).toBe(true);
});
it("should return true for private prompt when user is admin", () => {
const session = { user: { id: "admin1", role: "ADMIN" } } as Session;
expect(
canViewPrompt({ isPrivate: true, authorId: "user1" }, session)
).toBe(true);
});
it("should return false for private prompt with session missing user", () => {
const session = {} as Session;
expect(
canViewPrompt({ isPrivate: true, authorId: "user1" }, session)
).toBe(false);
});
});
describe("checkPromptAccess", () => {
beforeEach(() => {
vi.clearAllMocks();
});
it("should return 404 for null prompt", async () => {
const result = await checkPromptAccess(null);
expect(result).not.toBeNull();
expect(result!.status).toBe(404);
const data = await result!.json();
expect(data.error).toBe("not_found");
});
it("should return null for public prompt (no auth call)", async () => {
const result = await checkPromptAccess({ isPrivate: false, authorId: "user1" });
expect(result).toBeNull();
expect(auth).not.toHaveBeenCalled();
});
it("should return 404 for private prompt with no session", async () => {
vi.mocked(auth).mockResolvedValue(null);
const result = await checkPromptAccess({ isPrivate: true, authorId: "user1" });
expect(result).not.toBeNull();
expect(result!.status).toBe(404);
expect(auth).toHaveBeenCalledOnce();
});
it("should return 404 for private prompt when user is not owner", async () => {
vi.mocked(auth).mockResolvedValue({ user: { id: "other", role: "USER" } } as never);
const result = await checkPromptAccess({ isPrivate: true, authorId: "user1" });
expect(result).not.toBeNull();
expect(result!.status).toBe(404);
});
it("should return null for private prompt when user is the owner", async () => {
vi.mocked(auth).mockResolvedValue({ user: { id: "user1", role: "USER" } } as never);
const result = await checkPromptAccess({ isPrivate: true, authorId: "user1" });
expect(result).toBeNull();
});
it("should return null for private prompt when user is admin", async () => {
vi.mocked(auth).mockResolvedValue({ user: { id: "admin1", role: "ADMIN" } } as never);
const result = await checkPromptAccess({ isPrivate: true, authorId: "user1" });
expect(result).toBeNull();
});
});
+4 -13
View File
@@ -2,6 +2,7 @@ import { Metadata } from "next";
import Link from "next/link";
import { getTranslations } from "next-intl/server";
import { getConfig } from "@/lib/config";
import { getConfiguredProviderIds, getProviderMetadata } from "@/lib/auth/provider-metadata";
import { AuthContent } from "@/components/auth/auth-content";
export const metadata: Metadata = {
@@ -9,24 +10,14 @@ export const metadata: Metadata = {
description: "Login to your account",
};
// Helper to get providers from config (supports both old `provider` and new `providers` array)
function getProviders(config: Awaited<ReturnType<typeof getConfig>>): string[] {
if (config.auth.providers && config.auth.providers.length > 0) {
return config.auth.providers;
}
if (config.auth.provider) {
return [config.auth.provider];
}
return ["credentials"];
}
export default async function LoginPage() {
const t = await getTranslations("auth");
const config = await getConfig();
const providers = getProviders(config);
const providers = getConfiguredProviderIds(config);
const hasCredentials = providers.includes("credentials");
const hasOnlyCredentials = providers.length === 1 && hasCredentials;
const useCloneBranding = config.homepage?.useCloneBranding ?? false;
const { displayNames, logos } = getProviderMetadata(providers);
return (
<div className="container flex min-h-[calc(100vh-6rem)] flex-col items-center justify-center py-8">
@@ -38,7 +29,7 @@ export default async function LoginPage() {
</p>
</div>
<div className="border rounded-lg p-4">
<AuthContent providers={providers} mode="login" useCloneBranding={useCloneBranding} />
<AuthContent providers={providers} mode="login" useCloneBranding={useCloneBranding} providerDisplayNames={displayNames} providerLogos={logos} />
</div>
{hasCredentials && (
<p className="text-center text-xs text-muted-foreground">
+5 -13
View File
@@ -3,6 +3,7 @@ import Link from "next/link";
import { redirect } from "next/navigation";
import { getTranslations } from "next-intl/server";
import { getConfig } from "@/lib/config";
import { getConfiguredProviderIds, getProviderMetadata } from "@/lib/auth/provider-metadata";
import { AuthContent } from "@/components/auth/auth-content";
export const metadata: Metadata = {
@@ -10,21 +11,10 @@ export const metadata: Metadata = {
description: "Create a new account",
};
// Helper to get providers from config (supports both old `provider` and new `providers` array)
function getProviders(config: Awaited<ReturnType<typeof getConfig>>): string[] {
if (config.auth.providers && config.auth.providers.length > 0) {
return config.auth.providers;
}
if (config.auth.provider) {
return [config.auth.provider];
}
return ["credentials"];
}
export default async function RegisterPage() {
const t = await getTranslations("auth");
const config = await getConfig();
const providers = getProviders(config);
const providers = getConfiguredProviderIds(config);
const hasCredentials = providers.includes("credentials");
// Block registration if disabled or credentials not enabled
@@ -32,6 +22,8 @@ export default async function RegisterPage() {
redirect("/login");
}
const { displayNames, logos } = getProviderMetadata(providers);
return (
<div className="container flex min-h-[calc(100vh-6rem)] flex-col items-center justify-center py-8">
<div className="w-full max-w-sm space-y-4">
@@ -40,7 +32,7 @@ export default async function RegisterPage() {
<p className="text-xs text-muted-foreground">{t("registerDescription")}</p>
</div>
<div className="border rounded-lg p-4">
<AuthContent providers={providers} mode="register" />
<AuthContent providers={providers} mode="register" providerDisplayNames={displayNames} providerLogos={logos} />
</div>
<p className="text-center text-xs text-muted-foreground">
{t("hasAccount")}{" "}
+305 -4
View File
@@ -1,5 +1,306 @@
// OG image generation disabled for Cloudflare Workers (resvg.wasm too large)
// Falls back to static og.png from the public directory
export default function OGImage() {
return new Response(null, { status: 302, headers: { Location: "/og.png" } });
import { ImageResponse } from "next/og";
import { db } from "@/lib/db";
import { getConfig } from "@/lib/config";
export const alt = "User Profile";
export const size = {
width: 1200,
height: 630,
};
export const contentType = "image/png";
export const revalidate = 3600;
const radiusMap: Record<string, number> = {
none: 0,
sm: 8,
md: 12,
lg: 16,
};
export default async function OGImage({ params }: { params: Promise<{ username: string }> }) {
const { username: rawUsername } = await params;
const config = await getConfig();
const radius = radiusMap[config.theme?.radius || "sm"] || 8;
// Only support /@username format
const decodedUsername = decodeURIComponent(rawUsername);
if (!decodedUsername.startsWith("@")) {
return new ImageResponse(
(
<div
style={{
height: "100%",
width: "100%",
display: "flex",
alignItems: "center",
justifyContent: "center",
backgroundColor: "#0a0a0a",
color: "#fff",
fontSize: 48,
fontWeight: 600,
}}
>
User Not Found
</div>
),
{ ...size }
);
}
const username = decodedUsername.slice(1);
const user = await db.user.findFirst({
where: { username: { equals: username, mode: "insensitive" } },
orderBy: { createdAt: "asc" },
select: {
id: true,
name: true,
username: true,
avatar: true,
role: true,
createdAt: true,
_count: {
select: {
prompts: true,
},
},
},
});
if (!user) {
return new ImageResponse(
(
<div
style={{
height: "100%",
width: "100%",
display: "flex",
alignItems: "center",
justifyContent: "center",
backgroundColor: "#0a0a0a",
color: "#fff",
fontSize: 48,
fontWeight: 600,
}}
>
User Not Found
</div>
),
{ ...size }
);
}
// Get total upvotes received
const totalUpvotes = await db.promptVote.count({
where: {
prompt: {
authorId: user.id,
},
},
});
// Format join date
const joinDate = new Intl.DateTimeFormat("en-US", {
month: "short",
year: "numeric",
}).format(user.createdAt);
const primaryColor = config.theme?.colors?.primary || "#6366f1";
return new ImageResponse(
(
<div
style={{
height: "100%",
width: "100%",
display: "flex",
flexDirection: "column",
backgroundColor: "#ffffff",
padding: "48px 56px",
}}
>
{/* Top Bar - Branding */}
<div
style={{
display: "flex",
alignItems: "center",
justifyContent: "space-between",
marginBottom: 40,
}}
>
<span style={{ fontSize: 24, fontWeight: 600, color: primaryColor }}>
{config.branding.name}
</span>
{user.role === "ADMIN" && (
<div
style={{
display: "flex",
alignItems: "center",
backgroundColor: primaryColor + "20",
color: primaryColor,
padding: "8px 16px",
borderRadius: radius * 2,
fontSize: 18,
fontWeight: 600,
}}
>
Admin
</div>
)}
</div>
{/* Main Content */}
<div
style={{
display: "flex",
flex: 1,
alignItems: "center",
gap: 48,
}}
>
{/* Avatar */}
{user.avatar ? (
<img
src={user.avatar}
width={180}
height={180}
style={{
borderRadius: 90,
border: `4px solid ${primaryColor}30`,
}}
/>
) : (
<div
style={{
width: 180,
height: 180,
borderRadius: 90,
backgroundColor: "#f4f4f5",
display: "flex",
alignItems: "center",
justifyContent: "center",
color: "#71717a",
fontSize: 72,
fontWeight: 600,
border: `4px solid ${primaryColor}30`,
}}
>
{(user.name || user.username).charAt(0).toUpperCase()}
</div>
)}
{/* User Info */}
<div
style={{
display: "flex",
flexDirection: "column",
flex: 1,
}}
>
{/* Name */}
<div
style={{
display: "flex",
fontSize: 56,
fontWeight: 700,
color: "#18181b",
lineHeight: 1.2,
letterSpacing: "-0.02em",
marginBottom: 8,
}}
>
{user.name || user.username}
</div>
{/* Username */}
<div
style={{
display: "flex",
fontSize: 28,
color: "#71717a",
marginBottom: 32,
}}
>
@{user.username}
</div>
{/* Stats */}
<div
style={{
display: "flex",
gap: 40,
}}
>
{/* Prompts */}
<div
style={{
display: "flex",
alignItems: "center",
gap: 12,
backgroundColor: "#f4f4f5",
padding: "14px 24px",
borderRadius: radius * 2,
}}
>
<svg width="28" height="28" viewBox="0 0 24 24" fill="none" stroke="#71717a" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round">
<path d="M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z" />
<path d="M14 2v4a2 2 0 0 0 2 2h4" />
</svg>
<span style={{ fontSize: 26, fontWeight: 600, color: "#18181b" }}>
{user._count.prompts}
</span>
<span style={{ fontSize: 22, color: "#71717a" }}>
prompts
</span>
</div>
{/* Upvotes */}
<div
style={{
display: "flex",
alignItems: "center",
gap: 12,
backgroundColor: primaryColor + "15",
padding: "14px 24px",
borderRadius: radius * 2,
}}
>
<svg width="28" height="28" viewBox="0 0 24 24" fill="none" stroke={primaryColor} strokeWidth="2.5" strokeLinecap="round" strokeLinejoin="round">
<path d="m18 15-6-6-6 6" />
</svg>
<span style={{ fontSize: 26, fontWeight: 600, color: primaryColor }}>
{totalUpvotes}
</span>
<span style={{ fontSize: 22, color: "#71717a" }}>
upvotes
</span>
</div>
{/* Joined */}
<div
style={{
display: "flex",
alignItems: "center",
gap: 12,
backgroundColor: "#f4f4f5",
padding: "14px 24px",
borderRadius: radius * 2,
}}
>
<svg width="26" height="26" viewBox="0 0 24 24" fill="none" stroke="#71717a" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round">
<rect width="18" height="18" x="3" y="4" rx="2" ry="2" />
<line x1="16" x2="16" y1="2" y2="6" />
<line x1="8" x2="8" y1="2" y2="6" />
<line x1="3" x2="21" y1="10" y2="10" />
</svg>
<span style={{ fontSize: 22, color: "#71717a" }}>
Joined {joinDate}
</span>
</div>
</div>
</div>
</div>
</div>
),
{ ...size }
);
}
+2
View File
@@ -38,6 +38,7 @@ export async function generateMetadata({ params }: UserProfilePageProps): Promis
const user = await db.user.findFirst({
where: { username: { equals: username, mode: "insensitive" } },
orderBy: { createdAt: "asc" },
select: { name: true, username: true },
});
@@ -72,6 +73,7 @@ export default async function UserProfilePage({ params, searchParams }: UserProf
const user = await db.user.findFirst({
where: { username: { equals: username, mode: "insensitive" } },
orderBy: { createdAt: "asc" },
select: {
id: true,
name: true,
+61
View File
@@ -124,6 +124,11 @@ const coreContributors = [
role: "Chrome Extension Maintainer",
x: "fatihsolhann",
},
{
username: "JohnPhamous",
role: "Performance (Vercel)",
x: "JohnPhamous",
},
{
username: "claude-opus-4.5",
displayName: "Claude Opus 4.5",
@@ -169,6 +174,15 @@ const designCredits = [
},
];
const securityCredits = [
{
username: "mdisec",
displayName: "Mehmet Ince",
role: "Security Fixes",
x: "mdisec",
},
];
const ideationCredits = [
{
username: "semihkislar",
@@ -566,6 +580,53 @@ export default async function AboutPage() {
</div>
</section>
{/* Security */}
<section className="mb-10">
<h2 className="text-lg font-semibold mb-4">{t("securityTitle")}</h2>
<div className="grid gap-3 sm:grid-cols-2">
{securityCredits.map((contributor) => (
<div
key={contributor.username}
className="flex items-center gap-3 p-3 border rounded-lg"
>
<Image
src={`https://github.com/${contributor.username}.png`}
alt=""
width={40}
height={40}
className="rounded-full shrink-0"
/>
<div className="flex-1 min-w-0">
<div className="font-medium text-sm">
{contributor.displayName ?? `@${contributor.username}`}
</div>
<div className="text-xs text-muted-foreground">{contributor.role}</div>
</div>
<div className="flex items-center gap-2">
<Link
href={`https://github.com/${contributor.username}`}
target="_blank"
rel="noopener noreferrer"
className="p-1.5 rounded-md hover:bg-muted transition-colors"
title="GitHub"
>
<BrandIcon name="github" />
</Link>
<Link
href={`https://x.com/${contributor.x}`}
target="_blank"
rel="noopener noreferrer"
className="p-1.5 rounded-md hover:bg-muted transition-colors"
title="X"
>
<BrandIcon name="x" />
</Link>
</div>
</div>
))}
</div>
</section>
{/* Ideation */}
<section className="mb-10">
<h2 className="text-lg font-semibold mb-4">{t("ideationTitle")}</h2>
-17
View File
@@ -1,17 +0,0 @@
import { NextResponse } from "next/server";
export async function GET() {
const domain = process.env.EZOIC_SITE_DOMAIN;
if (!domain) {
return new NextResponse("# ads.txt not configured\n", {
status: 200,
headers: { "Content-Type": "text/plain" },
});
}
return NextResponse.redirect(
`https://srv.adstxtmanager.com/19390/${domain}`,
301
);
}
+38 -42
View File
@@ -2,12 +2,16 @@ import { NextResponse } from "next/server";
import bcrypt from "bcryptjs";
import { z } from "zod";
import { db } from "@/lib/db";
import { isUniqueConstraintViolation } from "@/lib/db-errors";
import { getConfig } from "@/lib/config";
// Trim before validation to prevent unicode/whitespace tricks that bypass uniqueness checks (e.g. "admin@x.com\u200B" vs "admin@x.com") on certain DBMS
const trimmed = z.preprocess((v) => (typeof v === "string" ? v.trim() : v), z.string());
const registerSchema = z.object({
name: z.string().min(2),
username: z.string().min(1).regex(/^[a-zA-Z0-9_]+$/),
email: z.string().email(),
name: trimmed.pipe(z.string().min(2)),
username: trimmed.pipe(z.string().min(1).max(30).regex(/^[a-z0-9_]+$/)),
email: trimmed.pipe(z.string().email()).transform((v) => v.toLowerCase()),
password: z.string().min(6),
});
@@ -34,49 +38,41 @@ export async function POST(request: Request) {
const { name, username, email, password } = parsed.data;
// Check if email already exists
const existingEmail = await db.user.findUnique({
where: { email },
});
if (existingEmail) {
return NextResponse.json(
{ error: "email_taken", message: "Email is already taken" },
{ status: 400 }
);
}
// Check if username already exists (case-insensitive)
const existingUsername = await db.user.findFirst({
where: { username: { equals: username, mode: "insensitive" } },
});
if (existingUsername) {
return NextResponse.json(
{ error: "username_taken", message: "Username is already taken" },
{ status: 400 }
);
}
// Hash password
const hashedPassword = await bcrypt.hash(password, 12);
// Create user
const user = await db.user.create({
data: {
name,
username,
email,
password: hashedPassword,
},
});
// Atomic create — DB unique constraints enforce email and CI username uniqueness
try {
const user = await db.user.create({
data: {
name,
username,
email,
password: hashedPassword,
},
});
return NextResponse.json({
id: user.id,
name: user.name,
username: user.username,
email: user.email,
});
return NextResponse.json({
id: user.id,
name: user.name,
username: user.username,
email: user.email,
});
} catch (error) {
if (isUniqueConstraintViolation(error, "email")) {
return NextResponse.json(
{ error: "email_taken", message: "Email is already taken" },
{ status: 409 }
);
}
if (isUniqueConstraintViolation(error, "username")) {
return NextResponse.json(
{ error: "username_taken", message: "Username is already taken" },
{ status: 409 }
);
}
throw error;
}
} catch (error) {
console.error("Registration error:", error);
return NextResponse.json(
@@ -2,6 +2,7 @@ import { NextRequest, NextResponse } from "next/server";
import { z } from "zod";
import { auth } from "@/lib/auth";
import { db } from "@/lib/db";
import { checkPromptAccess } from "@/lib/prompt-access";
const updateChangeRequestSchema = z.object({
status: z.enum(["APPROVED", "REJECTED", "PENDING"]),
@@ -196,7 +197,8 @@ export async function GET(
select: {
id: true,
title: true,
content: true,
isPrivate: true,
authorId: true,
},
},
},
@@ -209,6 +211,9 @@ export async function GET(
);
}
const denied = await checkPromptAccess(changeRequest.prompt);
if (denied) return denied;
return NextResponse.json(changeRequest);
} catch (error) {
console.error("Get change request error:", error);
@@ -2,6 +2,7 @@ import { NextRequest, NextResponse } from "next/server";
import { z } from "zod";
import { auth } from "@/lib/auth";
import { db } from "@/lib/db";
import { checkPromptAccess } from "@/lib/prompt-access";
const createChangeRequestSchema = z.object({
proposedContent: z.string().min(1),
@@ -94,6 +95,14 @@ export async function GET(
try {
const { id: promptId } = await params;
const prompt = await db.prompt.findUnique({
where: { id: promptId },
select: { isPrivate: true, authorId: true },
});
const denied = await checkPromptAccess(prompt);
if (denied) return denied;
const changeRequests = await db.changeRequest.findMany({
where: { promptId },
orderBy: { createdAt: "desc" },
+4 -4
View File
@@ -2,6 +2,7 @@ import { NextRequest, NextResponse } from "next/server";
import { auth } from "@/lib/auth";
import { db } from "@/lib/db";
import { z } from "zod";
import { checkPromptAccess } from "@/lib/prompt-access";
const addExampleSchema = z.object({
mediaUrl: z.string().url(),
@@ -16,12 +17,11 @@ export async function GET(
const prompt = await db.prompt.findUnique({
where: { id: promptId },
select: { id: true, type: true },
select: { id: true, type: true, isPrivate: true, authorId: true },
});
if (!prompt) {
return NextResponse.json({ error: "Prompt not found" }, { status: 404 });
}
const denied = await checkPromptAccess(prompt);
if (denied || !prompt) return denied!;
// Only allow examples for IMAGE and VIDEO prompts
if (prompt.type !== "IMAGE" && prompt.type !== "VIDEO") {
+12 -3
View File
@@ -1,6 +1,6 @@
import { NextRequest } from "next/server";
import { db } from "@/lib/db";
import { parseSkillFiles } from "@/lib/skill-files";
import { parseSkillFiles, sanitizeFilename } from "@/lib/skill-files";
import JSZip from "jszip";
/**
@@ -53,9 +53,18 @@ export async function GET(
// Create a zip file
const zip = new JSZip();
// Add each file to the zip
// Add each file to the zip (sanitize filenames to prevent Zip Slip)
for (const file of files) {
zip.file(file.filename, file.content);
const candidate = file.filename
.replace(/\\/g, "/")
.split("/")
.filter((segment) => segment && segment !== "." && segment !== "..")
.join("/");
const safeName = sanitizeFilename(candidate);
if (!safeName) {
continue;
}
zip.file(safeName, file.content);
}
// Generate the zip content as blob for Response compatibility
@@ -2,6 +2,7 @@ import { NextRequest, NextResponse } from "next/server";
import { z } from "zod";
import { auth } from "@/lib/auth";
import { db } from "@/lib/db";
import { checkPromptAccess } from "@/lib/prompt-access";
const createVersionSchema = z.object({
content: z.string().min(1, "Content is required"),
@@ -116,6 +117,14 @@ export async function GET(
try {
const { id: promptId } = await params;
const prompt = await db.prompt.findUnique({
where: { id: promptId },
select: { isPrivate: true, authorId: true },
});
const denied = await checkPromptAccess(prompt);
if (denied) return denied;
const versions = await db.promptVersion.findMany({
where: { promptId },
orderBy: { version: "desc" },
+12 -6
View File
@@ -1,6 +1,7 @@
import { NextRequest, NextResponse } from "next/server";
import { auth } from "@/lib/auth";
import { db } from "@/lib/db";
import { checkPromptAccess } from "@/lib/prompt-access";
// POST - Upvote a prompt
export async function POST(
@@ -21,14 +22,11 @@ export async function POST(
// Check if prompt exists
const prompt = await db.prompt.findUnique({
where: { id: promptId },
select: { isPrivate: true, authorId: true },
});
if (!prompt) {
return NextResponse.json(
{ error: "not_found", message: "Prompt not found" },
{ status: 404 }
);
}
const denied = await checkPromptAccess(prompt);
if (denied) return denied;
// Check if already voted
const existing = await db.promptVote.findUnique({
@@ -86,6 +84,14 @@ export async function DELETE(
const { id: promptId } = await params;
const prompt = await db.prompt.findUnique({
where: { id: promptId },
select: { isPrivate: true, authorId: true },
});
const denied = await checkPromptAccess(prompt);
if (denied) return denied;
// Delete vote
await db.promptVote.deleteMany({
where: {
+5 -11
View File
@@ -1,23 +1,17 @@
import { NextRequest, NextResponse } from "next/server";
import { auth } from "@/lib/auth";
import { getStoragePlugin } from "@/lib/plugins/registry";
import sharp from "sharp";
const MAX_IMAGE_SIZE = 4 * 1024 * 1024; // 4MB for images
const MAX_VIDEO_SIZE = 4 * 1024 * 1024; // 4MB for videos (Vercel serverless limit)
const ALLOWED_IMAGE_TYPES = ["image/jpeg", "image/png", "image/gif", "image/webp"];
const ALLOWED_VIDEO_TYPES = ["video/mp4"];
async function compressToJpg(buffer: Buffer): Promise<Buffer> {
try {
// Use turbopackIgnore to prevent Turbopack from tracing this native module
// sharp is unavailable on Cloudflare Workers and will gracefully fallback
const sharp = (await import(/* turbopackIgnore: true */ "sharp")).default;
return await sharp(buffer)
.jpeg({ quality: 90, mozjpeg: true })
.toBuffer();
} catch {
// sharp is not available (e.g. on Cloudflare Workers), return buffer as-is
return buffer;
}
return await sharp(buffer)
.jpeg({ quality: 90, mozjpeg: true })
.toBuffer();
}
export async function POST(request: NextRequest) {
+31 -36
View File
@@ -3,6 +3,7 @@ import { z } from "zod";
import { Prisma } from "@prisma/client";
import { auth } from "@/lib/auth";
import { db } from "@/lib/db";
import { isUniqueConstraintViolation } from "@/lib/db-errors";
const customLinkSchema = z.object({
type: z.enum(["website", "github", "twitter", "linkedin", "instagram", "youtube", "twitch", "discord", "mastodon", "bluesky", "sponsor"]),
@@ -10,13 +11,12 @@ const customLinkSchema = z.object({
label: z.string().max(30).optional(),
});
// Trim before validation to prevent unicode/whitespace tricks that bypass uniqueness checks (e.g. "admin\u200B@x.com" vs "admin@x.com")
const trimmed = z.preprocess((v) => (typeof v === "string" ? v.trim() : v), z.string());
const updateProfileSchema = z.object({
name: z.string().min(1).max(100),
username: z
.string()
.min(1)
.max(30)
.regex(/^[a-zA-Z0-9_]+$/),
name: trimmed.pipe(z.string().min(1).max(100)),
username: trimmed.pipe(z.string().min(1).max(30).regex(/^[a-z0-9_]+$/)),
avatar: z.string().url().optional().or(z.literal("")),
bio: z.string().max(250).optional().or(z.literal("")),
customLinks: z.array(customLinkSchema).max(5).optional(),
@@ -44,43 +44,38 @@ export async function PATCH(request: NextRequest) {
const { name, username, avatar, bio, customLinks } = parsed.data;
// Check if username is taken by another user
if (username !== session.user.username) {
const existingUser = await db.user.findUnique({
where: { username },
select: { id: true },
// Atomic update — DB-level CI unique index prevents collisions
try {
const user = await db.user.update({
where: { id: session.user.id },
data: {
name,
username,
avatar: avatar || null,
bio: bio || null,
customLinks: customLinks && customLinks.length > 0 ? customLinks : Prisma.DbNull,
},
select: {
id: true,
name: true,
username: true,
email: true,
avatar: true,
bio: true,
customLinks: true,
},
});
if (existingUser && existingUser.id !== session.user.id) {
return NextResponse.json(user);
} catch (error) {
if (isUniqueConstraintViolation(error, "username")) {
return NextResponse.json(
{ error: "username_taken", message: "This username is already taken" },
{ status: 400 }
{ status: 409 }
);
}
throw error;
}
// Update user
const user = await db.user.update({
where: { id: session.user.id },
data: {
name,
username,
avatar: avatar || null,
bio: bio || null,
customLinks: customLinks && customLinks.length > 0 ? customLinks : Prisma.DbNull,
},
select: {
id: true,
name: true,
username: true,
email: true,
avatar: true,
bio: true,
customLinks: true,
},
});
return NextResponse.json(user);
} catch (error) {
console.error("Update profile error:", error);
return NextResponse.json(
+2 -2
View File
@@ -107,7 +107,7 @@ const jsonLd = {
name: "Prompt Engineering",
},
isAccessibleForFree: true,
numberOfPages: 25,
numberOfPages: 26,
bookFormat: "https://schema.org/EBook",
license: "https://creativecommons.org/publicdomain/zero/1.0/",
};
@@ -130,7 +130,7 @@ export default async function BookHomePage() {
{/* JSON-LD structured data */}
<script
type="application/ld+json"
dangerouslySetInnerHTML={{ __html: JSON.stringify(jsonLd) }}
dangerouslySetInnerHTML={{ __html: JSON.stringify(jsonLd).replace(/</g, '\\u003c') }}
/>
<div className="max-w-2xl">
{/* Continue Reading Button */}
+53 -4
View File
@@ -1,5 +1,6 @@
import Link from "next/link";
import Image from "next/image";
import { getTranslations } from "next-intl/server";
import { Server, Database, Key, Palette, Globe, Settings, Cpu } from "lucide-react";
import DeepWikiIcon from "@/../public/deepwiki.svg";
import Context7Icon from "@/../public/context7.svg";
@@ -17,7 +18,9 @@ export const metadata = {
description: "Deploy your own prompts.chat instance with customizable branding, themes, and authentication",
};
export default function SelfHostingPage() {
export default async function SelfHostingPage() {
const t = await getTranslations("selfHosting");
return (
<div className="container max-w-4xl py-10">
<h1 className="text-2xl font-bold mb-2">Self-Hosting Guide</h1>
@@ -110,12 +113,58 @@ export default function SelfHostingPage() {
Prerequisites
</h3>
<ul className="list-disc list-inside text-muted-foreground space-y-1">
<li>Node.js 18+</li>
<li>PostgreSQL database</li>
<li>npm or yarn</li>
<li>{t("prerequisites.nodeJs")}</li>
<li>{t("prerequisites.postgresql")}</li>
<li>{t("prerequisites.npm")}</li>
</ul>
</div>
{/* Recommended Database */}
<div className="space-y-4">
<h3 className="text-lg font-semibold flex items-center gap-2">
<Database className="h-5 w-5" />
Recommended Database
</h3>
<div className="rounded-lg border p-4 space-y-4">
<p className="text-muted-foreground">
prompts.chat requires PostgreSQL. For a hosted database, we recommend{" "}
<Link
href="https://get.neon.com/VqfnMo4"
target="_blank"
rel="noopener noreferrer"
className="underline hover:text-foreground"
>
Neon
</Link>
{" "}for serverless Postgres, connection pooling, and database branching.
</p>
<div>
<p className="text-xs uppercase tracking-wide text-muted-foreground mb-3">Sponsored by</p>
<Link
href="https://get.neon.com/VqfnMo4"
target="_blank"
rel="noopener noreferrer"
className="inline-flex"
>
<Image
src="/sponsors/neon.svg"
alt="Neon"
width={250}
height={72}
className="h-10 w-auto dark:hidden"
/>
<Image
src="/sponsors/neon-dark.svg"
alt="Neon"
width={250}
height={72}
className="h-10 w-auto hidden dark:block"
/>
</Link>
</div>
</div>
</div>
{/* Installation */}
<div className="space-y-4">
<h3 className="text-lg font-semibold">Quick Start</h3>
+9 -1
View File
@@ -1,17 +1,25 @@
"use client";
import * as Sentry from "@sentry/nextjs";
import NextError from "next/error";
import { useEffect } from "react";
export default function GlobalError({
error,
}: {
error: Error & { digest?: string };
}) {
console.error(error);
useEffect(() => {
Sentry.captureException(error);
}, [error]);
return (
<html lang="en">
<body>
{/* `NextError` is the default Next.js error page component. Its type
definition requires a `statusCode` prop. However, since the App Router
does not expose status codes for errors, we simply pass 0 to render a
generic error message. */}
<NextError statusCode={0} />
</body>
</html>
-70
View File
@@ -802,73 +802,3 @@
padding: 0;
}
/* Ezoic privacy policy container styling */
#ezoic-privacy-policy-container {
margin-top: 1rem;
color: var(--muted-foreground);
}
#ezoic-privacy-policy-container h2,
#ezoic-privacy-policy-container h3,
#ezoic-privacy-policy-container h4 {
font-size: 1rem;
font-weight: 600;
margin-top: 1rem;
margin-bottom: 0.5rem;
color: var(--foreground);
}
#ezoic-privacy-policy-container p {
margin-top: 0.75rem;
margin-bottom: 0.75rem;
line-height: 1.7;
color: var(--muted-foreground);
}
#ezoic-privacy-policy-container a {
color: var(--primary);
text-decoration: underline;
text-underline-offset: 2px;
}
#ezoic-privacy-policy-container a:hover {
opacity: 0.8;
}
#ezoic-privacy-policy-container ul,
#ezoic-privacy-policy-container ol {
margin-top: 0.75rem;
margin-bottom: 0.75rem;
padding-left: 1.5rem;
color: var(--muted-foreground);
}
#ezoic-privacy-policy-container li {
margin-top: 0.25rem;
margin-bottom: 0.25rem;
}
#ezoic-privacy-policy-container table {
width: 100%;
border-collapse: collapse;
margin: 1rem 0;
font-size: 0.875rem;
}
#ezoic-privacy-policy-container th,
#ezoic-privacy-policy-container td {
border: 1px solid var(--border);
padding: 0.5rem 0.75rem;
text-align: left;
}
#ezoic-privacy-policy-container th {
background: var(--muted);
font-weight: 600;
}
/* Ezoic ad content: center and constrain injected ad creatives */
.ezoic-ad-content * {
margin-left: auto !important;
margin-right: auto !important;
}
+5 -5
View File
@@ -7,9 +7,9 @@ import { Header } from "@/components/layout/header";
import { Footer } from "@/components/layout/footer";
import { CookieConsentBanner } from "@/components/layout/cookie-consent";
import { Analytics } from "@/components/layout/analytics";
import { EzoicAds } from "@/components/layout/ezoic-ads";
import { WebsiteStructuredData } from "@/components/seo/structured-data";
import { AppBanner } from "@/components/layout/app-banner";
import { AnnouncementBanner } from "@/components/layout/announcement-banner";
import { LocaleDetector } from "@/components/providers/locale-detector";
import { getConfig } from "@/lib/config";
import { isRtlLocale } from "@/lib/i18n/config";
@@ -62,12 +62,12 @@ export const metadata: Metadata = {
publisher: "prompts.chat",
icons: {
icon: [
{ url: "/favicon/favicon.ico", sizes: "48x48" },
{ url: "/favicon/favicon-96x96.png", sizes: "96x96", type: "image/png" },
{ url: "/favicon/favicon.svg", type: "image/svg+xml" },
{ url: "/favicon/favicon-96x96.png", sizes: "96x96", type: "image/png" },
{ url: "/favicon/favicon.ico", sizes: "48x48" },
],
apple: "/favicon/apple-touch-icon.png",
shortcut: "/favicon/favicon.ico",
shortcut: "/favicon/favicon.svg",
},
manifest: "/favicon/site.webmanifest",
other: {
@@ -190,7 +190,6 @@ export default async function RootLayout({
{process.env.GOOGLE_ANALYTICS_ID && (
<Analytics gaId={process.env.GOOGLE_ANALYTICS_ID} />
)}
{process.env.EZOIC_ENABLED === "true" && <EzoicAds />}
<Providers locale={locale} messages={messages} theme={config.theme} branding={{ ...config.branding, useCloneBranding: config.homepage?.useCloneBranding }}>
{isEmbedRoute || isKidsRoute ? (
children
@@ -198,6 +197,7 @@ export default async function RootLayout({
<>
<LocaleDetector />
<div className="relative min-h-screen flex flex-col">
<AnnouncementBanner />
<Header authProvider={config.auth.provider} allowRegistration={config.auth.allowRegistration} />
<main className="flex-1">{children}</main>
<Footer />
+20 -2
View File
@@ -72,7 +72,7 @@ export default async function HomePage() {
/>
</div>
) : (
<div className="absolute top-0 end-0 bottom-0 w-1/3 2xl:w-1/2 hidden md:block pointer-events-none">
<div className="absolute top-0 end-0 bottom-0 w-2/5 xl:w-[45%] 2xl:w-1/2 hidden md:block pointer-events-none overflow-hidden">
{/* Video background */}
<div className="absolute inset-0">
<div className="absolute inset-0 bg-gradient-to-r rtl:bg-gradient-to-l from-background via-background/80 to-transparent z-10" />
@@ -126,7 +126,7 @@ export default async function HomePage() {
)}
<div className="container relative z-20">
<div className="max-w-2xl">
<div className="max-w-2xl lg:max-w-xl xl:max-w-2xl">
{useCloneBranding ? (
<>
<h1 className="text-2xl font-bold tracking-tight sm:text-3xl md:text-4xl lg:text-5xl !text-2xl sm:!text-3xl md:!text-4xl lg:!text-5xl text-primary">
@@ -313,6 +313,24 @@ export default async function HomePage() {
/>
</BuiltWithLink>
<span>by Cognition</span>
<span className="mx-0.5">·</span>
<span>hosted on</span>
<Link href="https://vercel.com/oss" target="_blank" rel="noopener noreferrer" className="inline-flex items-center opacity-60 hover:opacity-100 transition-opacity">
<Image
src="/sponsors/vercel-oss.svg"
alt="Vercel OSS Program"
width={240}
height={24}
className="h-4.5 w-auto dark:hidden"
/>
<Image
src="/sponsors/vercel-oss-dark.svg"
alt="Vercel OSS Program"
width={240}
height={24}
className="h-4.5 w-auto hidden dark:block"
/>
</Link>
</span>
</div>
)}
-21
View File
@@ -97,27 +97,6 @@ export default function PrivacyPage() {
</p>
</section>
{process.env.EZOIC_ENABLED === "true" && (
<section className="space-y-3">
<h2 className="text-lg font-semibold">Advertising & Ezoic</h2>
<p className="text-muted-foreground">
We use Ezoic to provide personalized ads and analytics on this site. Ezoic and its partners
may collect and use data about your visit to this and other websites to provide relevant
advertisements. For full details on how Ezoic and its partners use your information, including
a list of known cookies used on this site, please see the{" "}
<a
href="http://g.ezoic.net/privacy/prompts.chat"
target="_blank"
rel="noopener noreferrer"
className="underline hover:text-foreground"
>
Ezoic privacy disclosures
</a>.
</p>
<span id="ezoic-privacy-policy-embed"></span>
</section>
)}
<section className="space-y-3">
<h2 className="text-lg font-semibold">Your Rights & CC0 License</h2>
<p className="text-muted-foreground">
+2
View File
@@ -23,6 +23,8 @@ function getUserIdentifier(user: { email: string; username: string; githubUserna
return user.githubUsername || (isUnclaimedAccount ? user.username : user.email);
}
export const revalidate = 3600;
export async function GET() {
try {
const prompts = await db.prompt.findMany({
+210 -121
View File
@@ -1,5 +1,6 @@
import { NextResponse } from "next/server";
import { NextRequest, NextResponse } from "next/server";
import { db } from "@/lib/db";
import crypto from "crypto";
function getUserIdentifier(user: {
username: string;
@@ -8,139 +9,227 @@ function getUserIdentifier(user: {
return user.githubUsername || user.username;
}
export async function GET() {
const CONTENT_PREVIEW_LENGTH = 500;
const DEFAULT_LIMIT = 50;
const MAX_LIMIT = 100;
export const dynamic = "force-dynamic";
export const revalidate = 3600;
function generateETag(count: number, latestUpdatedAt: Date | null): string {
const raw = `${count}-${latestUpdatedAt?.toISOString() ?? "none"}`;
const hash = crypto.createHash("md5").update(raw).digest("hex");
return `"${hash}"`;
}
export async function GET(request: NextRequest) {
try {
const prompts = await db.prompt.findMany({
where: {
isPrivate: false,
isUnlisted: false,
deletedAt: null,
const searchParams = request.nextUrl.searchParams;
const fullContent = searchParams.get("full_content") === "true";
const pageParam = searchParams.get("page");
const limitParam = searchParams.get("limit");
const isPaginated = pageParam !== null || limitParam !== null;
const page = Math.max(1, parseInt(pageParam ?? "1", 10) || 1);
const limit = Math.min(
MAX_LIMIT,
Math.max(1, parseInt(limitParam ?? String(DEFAULT_LIMIT), 10) || DEFAULT_LIMIT)
);
const whereClause = {
isPrivate: false,
isUnlisted: false,
deletedAt: null,
};
// Fetch total count and latest updatedAt for ETag generation
const [totalCount, latestPrompt] = await Promise.all([
db.prompt.count({ where: whereClause }),
db.prompt.findFirst({
where: whereClause,
orderBy: { updatedAt: "desc" },
select: { updatedAt: true },
}),
]);
// Generate and check ETag for conditional requests
const etag = generateETag(totalCount, latestPrompt?.updatedAt ?? null);
const ifNoneMatch = request.headers.get("If-None-Match");
if (ifNoneMatch && ifNoneMatch === etag) {
return new NextResponse(null, {
status: 304,
headers: {
ETag: etag,
"Cache-Control":
"public, max-age=3600, s-maxage=3600, stale-while-revalidate=86400",
},
});
}
const selectClause = {
id: true,
title: true,
slug: true,
description: true,
content: true,
type: true,
mediaUrl: true,
viewCount: true,
createdAt: true,
updatedAt: true,
structuredFormat: true,
isFeatured: true,
featuredAt: true,
requiresMediaUpload: true,
requiredMediaType: true,
requiredMediaCount: true,
category: {
select: {
id: true,
name: true,
slug: true,
icon: true,
},
},
select: {
id: true,
title: true,
slug: true,
description: true,
content: true,
type: true,
mediaUrl: true,
viewCount: true,
createdAt: true,
updatedAt: true,
structuredFormat: true,
isFeatured: true,
featuredAt: true,
requiresMediaUpload: true,
requiredMediaType: true,
requiredMediaCount: true,
category: {
select: {
id: true,
name: true,
slug: true,
icon: true,
},
author: {
select: {
username: true,
name: true,
avatar: true,
githubUsername: true,
verified: true,
},
author: {
select: {
username: true,
name: true,
avatar: true,
githubUsername: true,
verified: true,
},
},
contributors: {
select: {
username: true,
name: true,
avatar: true,
githubUsername: true,
verified: true,
},
contributors: {
select: {
username: true,
name: true,
avatar: true,
githubUsername: true,
verified: true,
},
},
tags: {
select: {
tag: {
select: {
id: true,
name: true,
slug: true,
color: true,
},
},
tags: {
select: {
tag: {
select: {
id: true,
name: true,
slug: true,
color: true,
},
},
},
_count: {
select: {
votes: true,
comments: true,
},
},
_count: {
select: {
votes: true,
comments: true,
},
},
orderBy: { createdAt: "desc" },
} as const;
// eslint-disable-next-line @typescript-eslint/no-explicit-any
const queryOptions: any = {
where: whereClause,
select: selectClause,
orderBy: { createdAt: "desc" as const },
};
if (isPaginated) {
queryOptions.skip = (page - 1) * limit;
queryOptions.take = limit;
}
// eslint-disable-next-line @typescript-eslint/no-explicit-any
const prompts: any[] = await db.prompt.findMany(queryOptions);
const includeFullContent = fullContent;
const formattedPrompts = prompts.map((prompt) => {
const content = prompt.content ?? "";
const contentPreview =
content.length > CONTENT_PREVIEW_LENGTH
? content.slice(0, CONTENT_PREVIEW_LENGTH) + "..."
: content;
return {
id: prompt.id,
title: prompt.title,
slug: prompt.slug,
description: prompt.description,
...(includeFullContent
? { content, contentPreview }
: { contentPreview }),
type: prompt.type,
structuredFormat: prompt.structuredFormat,
mediaUrl: prompt.mediaUrl,
viewCount: prompt.viewCount,
voteCount: prompt._count.votes,
commentCount: prompt._count.comments,
isFeatured: prompt.isFeatured,
featuredAt: prompt.featuredAt,
requiresMediaUpload: prompt.requiresMediaUpload,
requiredMediaType: prompt.requiredMediaType,
requiredMediaCount: prompt.requiredMediaCount,
createdAt: prompt.createdAt,
updatedAt: prompt.updatedAt,
category: prompt.category
? {
id: prompt.category.id,
name: prompt.category.name,
slug: prompt.category.slug,
icon: prompt.category.icon,
}
: null,
author: {
username: prompt.author.username,
name: prompt.author.name,
avatar: prompt.author.avatar,
identifier: getUserIdentifier(prompt.author),
verified: prompt.author.verified,
},
contributors: prompt.contributors.map((c: { username: string; name: string | null; avatar: string | null; githubUsername: string | null; verified: boolean }) => ({
username: c.username,
name: c.name,
avatar: c.avatar,
identifier: getUserIdentifier(c),
verified: c.verified,
})),
tags: prompt.tags.map((pt: { tag: { id: string; name: string; slug: string; color: string | null } }) => ({
id: pt.tag.id,
name: pt.tag.name,
slug: pt.tag.slug,
color: pt.tag.color,
})),
};
});
const formattedPrompts = prompts.map((prompt) => ({
id: prompt.id,
title: prompt.title,
slug: prompt.slug,
description: prompt.description,
content: prompt.content,
type: prompt.type,
structuredFormat: prompt.structuredFormat,
mediaUrl: prompt.mediaUrl,
viewCount: prompt.viewCount,
voteCount: prompt._count.votes,
commentCount: prompt._count.comments,
isFeatured: prompt.isFeatured,
featuredAt: prompt.featuredAt,
requiresMediaUpload: prompt.requiresMediaUpload,
requiredMediaType: prompt.requiredMediaType,
requiredMediaCount: prompt.requiredMediaCount,
createdAt: prompt.createdAt,
updatedAt: prompt.updatedAt,
category: prompt.category
? {
id: prompt.category.id,
name: prompt.category.name,
slug: prompt.category.slug,
icon: prompt.category.icon,
}
: null,
author: {
username: prompt.author.username,
name: prompt.author.name,
avatar: prompt.author.avatar,
identifier: getUserIdentifier(prompt.author),
verified: prompt.author.verified,
},
contributors: prompt.contributors.map((c) => ({
username: c.username,
name: c.name,
avatar: c.avatar,
identifier: getUserIdentifier(c),
verified: c.verified,
})),
tags: prompt.tags.map((pt) => ({
id: pt.tag.id,
name: pt.tag.name,
slug: pt.tag.slug,
color: pt.tag.color,
})),
}));
const totalPages = isPaginated ? Math.ceil(totalCount / limit) : 1;
return NextResponse.json(
{
count: formattedPrompts.length,
prompts: formattedPrompts,
const responseBody = isPaginated
? {
count: totalCount,
page,
limit,
totalPages,
hasMore: page < totalPages,
prompts: formattedPrompts,
}
: {
count: formattedPrompts.length,
prompts: formattedPrompts,
};
return NextResponse.json(responseBody, {
headers: {
"Cache-Control":
"public, max-age=3600, s-maxage=3600, stale-while-revalidate=86400",
ETag: etag,
},
{
headers: {
"Cache-Control": "public, max-age=3600",
},
}
);
});
} catch (error) {
console.error("prompts.json error:", error);
return NextResponse.json(
+360 -4
View File
@@ -1,5 +1,361 @@
// OG image generation disabled for Cloudflare Workers (resvg.wasm too large)
// Falls back to static og.png from the public directory
export default function OGImage() {
return new Response(null, { status: 302, headers: { Location: "/og.png" } });
import { ImageResponse } from "next/og";
import { db } from "@/lib/db";
import { getConfig } from "@/lib/config";
export const alt = "Prompt Preview";
export const size = {
width: 1200,
height: 630,
};
export const contentType = "image/png";
export const revalidate = 3600;
const typeLabels: Record<string, string> = {
TEXT: "Text Prompt",
IMAGE: "Image Prompt",
VIDEO: "Video Prompt",
AUDIO: "Audio Prompt",
STRUCTURED: "Structured",
};
const typeColors: Record<string, string> = {
TEXT: "#3b82f6",
IMAGE: "#8b5cf6",
VIDEO: "#ec4899",
AUDIO: "#f59e0b",
STRUCTURED: "#10b981",
};
const radiusMap: Record<string, number> = {
none: 0,
sm: 8,
md: 12,
lg: 16,
};
/**
* Extracts the prompt ID from a URL parameter that may contain a slug
*/
function extractPromptId(idParam: string): string {
const underscoreIndex = idParam.indexOf("_");
if (underscoreIndex !== -1) {
return idParam.substring(0, underscoreIndex);
}
return idParam;
}
export default async function OGImage({ params }: { params: Promise<{ id: string }> }) {
const { id: idParam } = await params;
const id = extractPromptId(idParam);
const config = await getConfig();
const radius = radiusMap[config.theme?.radius || "sm"] || 8;
const radiusLg = radius * 2; // For larger elements like content box
const prompt = await db.prompt.findUnique({
where: { id },
include: {
author: {
select: {
name: true,
username: true,
avatar: true,
},
},
category: {
select: {
name: true,
icon: true,
},
},
_count: {
select: { votes: true, contributors: true },
},
},
});
if (!prompt) {
return new ImageResponse(
(
<div
style={{
height: "100%",
width: "100%",
display: "flex",
alignItems: "center",
justifyContent: "center",
backgroundColor: "#0a0a0a",
color: "#fff",
fontSize: 48,
fontWeight: 600,
}}
>
Prompt Not Found
</div>
),
{ ...size }
);
}
// For structured prompts, try to prettify JSON/YAML
let displayContent = prompt.content;
if (prompt.type === "STRUCTURED") {
try {
if (prompt.structuredFormat === "JSON") {
const parsed = JSON.parse(prompt.content);
displayContent = JSON.stringify(parsed, null, 2);
}
} catch {
// Keep original if parsing fails
}
}
const truncatedContent = displayContent.length > 400
? displayContent.slice(0, 400) + "..."
: displayContent;
const isImagePrompt = prompt.type === "IMAGE" && prompt.mediaUrl;
const isStructuredPrompt = prompt.type === "STRUCTURED";
const voteCount = prompt._count.votes;
const contributorCount = prompt._count.contributors;
return new ImageResponse(
(
<div
style={{
height: "100%",
width: "100%",
display: "flex",
flexDirection: "column",
backgroundColor: "#ffffff",
padding: "48px 56px",
}}
>
{/* Top Bar */}
<div
style={{
display: "flex",
alignItems: "center",
justifyContent: "space-between",
marginBottom: 24,
}}
>
{/* Left: Branding */}
<div style={{ display: "flex", alignItems: "center", gap: 16 }}>
<span style={{ fontSize: 24, fontWeight: 600, color: config.theme?.colors?.primary || "#6366f1" }}>
{config.branding.name}
</span>
</div>
{/* Right: Stats */}
<div style={{ display: "flex", alignItems: "center", gap: 24 }}>
{/* Upvotes */}
<div style={{ display: "flex", alignItems: "center", gap: 8 }}>
<svg width="28" height="28" viewBox="0 0 24 24" fill="none" stroke={config.theme?.colors?.primary || "#6366f1"} strokeWidth="2.5" strokeLinecap="round" strokeLinejoin="round">
<path d="m18 15-6-6-6 6" />
</svg>
<span style={{ fontSize: 24, fontWeight: 600, color: config.theme?.colors?.primary || "#6366f1" }}>
{voteCount}
</span>
</div>
{/* Contributors */}
{contributorCount > 0 && (
<div style={{ display: "flex", alignItems: "center", gap: 8 }}>
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#a1a1aa" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round">
<path d="M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2" />
<circle cx="9" cy="7" r="4" />
<path d="M22 21v-2a4 4 0 0 0-3-3.87" />
<path d="M16 3.13a4 4 0 0 1 0 7.75" />
</svg>
<span style={{ fontSize: 20, color: "#71717a" }}>
+{contributorCount}
</span>
</div>
)}
</div>
</div>
{/* Main Content Area */}
<div
style={{
display: "flex",
flex: 1,
gap: 40,
}}
>
{/* Left Content */}
<div
style={{
display: "flex",
flexDirection: "column",
flex: 1,
}}
>
{/* Title Row with Category and Type Badge */}
<div
style={{
display: "flex",
alignItems: "flex-start",
justifyContent: "space-between",
gap: 20,
marginBottom: 16,
}}
>
<div
style={{
display: "flex",
fontSize: 48,
fontWeight: 700,
color: "#18181b",
lineHeight: 1.2,
letterSpacing: "-0.02em",
flex: 1,
}}
>
{prompt.title}
</div>
<div style={{ display: "flex", alignItems: "center", gap: 10, flexShrink: 0 }}>
{/* Category Badge */}
{prompt.category && (
<div
style={{
display: "flex",
alignItems: "center",
gap: 6,
backgroundColor: "#f4f4f5",
color: "#71717a",
padding: "8px 14px",
borderRadius: radius * 2.5,
fontSize: 20,
fontWeight: 500,
}}
>
{prompt.category.icon && <span>{prompt.category.icon}</span>}
<span>{prompt.category.name}</span>
</div>
)}
{/* Type Badge */}
<div
style={{
display: "flex",
alignItems: "center",
gap: 6,
backgroundColor: typeColors[prompt.type] + "30",
color: typeColors[prompt.type],
padding: "8px 16px",
borderRadius: radius * 2.5,
fontSize: 20,
fontWeight: 600,
}}
>
{typeLabels[prompt.type] || prompt.type}
</div>
</div>
</div>
{/* Content Preview */}
<div
style={{
display: "flex",
flexDirection: "column",
fontSize: isStructuredPrompt ? 18 : 22,
color: "#3f3f46",
lineHeight: isStructuredPrompt ? 1.4 : 1.6,
flex: 1,
backgroundColor: "#fafafa",
padding: "12px 14px",
borderRadius: radius,
border: `2px solid ${config.theme?.colors?.primary || "#6366f1"}20`,
overflow: "hidden",
}}
>
{isStructuredPrompt && (
<div
style={{
display: "flex",
alignItems: "center",
gap: 8,
marginBottom: 12,
paddingBottom: 12,
borderBottom: "1px solid #e4e4e7",
}}
>
<span style={{ color: config.theme?.colors?.primary || "#6366f1", fontWeight: 600, fontSize: 14 }}>
{prompt.structuredFormat || "JSON"}
</span>
</div>
)}
<div style={{ display: "flex", whiteSpace: isStructuredPrompt ? "pre" : "pre-wrap" }}>
{truncatedContent}
</div>
</div>
{/* Footer - Author Info */}
<div
style={{
display: "flex",
alignItems: "center",
justifyContent: "flex-end",
marginTop: 20,
}}
>
<div style={{ display: "flex", alignItems: "center", gap: 14 }}>
{/* Avatar */}
{prompt.author.avatar ? (
<img
src={prompt.author.avatar}
width={48}
height={48}
style={{ borderRadius: 24, border: "2px solid #e4e4e7" }}
/>
) : (
<div
style={{
width: 48,
height: 48,
borderRadius: 24,
backgroundColor: "#f4f4f5",
display: "flex",
alignItems: "center",
justifyContent: "center",
color: "#71717a",
fontSize: 20,
fontWeight: 600,
border: "2px solid #e4e4e7",
}}
>
{(prompt.author.name || prompt.author.username).charAt(0).toUpperCase()}
</div>
)}
<div style={{ display: "flex", flexDirection: "column" }}>
<span style={{ color: "#18181b", fontSize: 20, fontWeight: 600 }}>
{prompt.author.name || prompt.author.username}
</span>
<span style={{ color: "#71717a", fontSize: 16 }}>
@{prompt.author.username}
</span>
</div>
</div>
</div>
</div>
{/* Image Preview (for image prompts) */}
{isImagePrompt && (
<img
src={prompt.mediaUrl!}
width={280}
height={420}
style={{
borderRadius: radiusLg,
objectFit: "cover",
objectPosition: "center",
border: "2px solid #e4e4e7",
}}
/>
)}
</div>
</div>
),
{ ...size }
);
}
+10 -2
View File
@@ -8,6 +8,7 @@ import { AnimatedDate } from "@/components/ui/animated-date";
import { ShareDropdown } from "@/components/prompts/share-dropdown";
import { auth } from "@/lib/auth";
import { db } from "@/lib/db";
import { canViewPrompt } from "@/lib/prompt-access";
import { Button } from "@/components/ui/button";
import { Badge } from "@/components/ui/badge";
import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar";
@@ -61,13 +62,20 @@ export async function generateMetadata({ params }: PromptPageProps): Promise<Met
const id = extractPromptId(idParam);
const prompt = await db.prompt.findUnique({
where: { id },
select: { title: true, description: true },
select: { title: true, description: true, isPrivate: true, authorId: true },
});
if (!prompt) {
return { title: "Prompt Not Found" };
}
if (prompt.isPrivate) {
const session = await auth();
if (!canViewPrompt(prompt, session)) {
return { title: "Prompt Not Found" };
}
}
return {
title: prompt.title,
description: prompt.description || `View the prompt: ${prompt.title}`,
@@ -223,7 +231,7 @@ export default async function PromptPage({ params }: PromptPageProps) {
}
// Check if user can view private prompt
if (prompt.isPrivate && prompt.authorId !== session?.user?.id) {
if (!canViewPrompt(prompt, session)) {
notFound();
}
+1 -1
View File
@@ -1 +1 @@
export { default } from "./opengraph-image";
export { default, alt, size, contentType } from "./opengraph-image";
+2
View File
@@ -16,6 +16,8 @@ import { isAISearchEnabled, semanticSearch } from "@/lib/ai/embeddings";
import { isAIGenerationEnabled } from "@/lib/ai/generation";
import config from "@/../prompts.config";
export const revalidate = 60;
export const metadata: Metadata = {
title: "Prompts",
description: "Browse and discover AI prompts",
-81
View File
@@ -1,81 +0,0 @@
"use client";
import { useEffect, useRef, useState } from "react";
import { useTranslations } from "next-intl";
import { runEzoic } from "@/lib/ezoic";
interface EzoicPlaceholderProps {
id: number;
}
export function EzoicPlaceholder({ id }: EzoicPlaceholderProps) {
const t = useTranslations("common");
const [isRendered, setIsRendered] = useState(false);
const [hasAdContent, setHasAdContent] = useState(true);
const placeholderRef = useRef<HTMLDivElement>(null);
useEffect(() => {
// Render the placeholder div first, then tell Ezoic to fill it.
// This ensures the DOM element exists before showAds is called.
setIsRendered(true);
// Use requestAnimationFrame to guarantee the placeholder div
// is in the DOM before Ezoic tries to find it.
const rafId = requestAnimationFrame(() => {
runEzoic(() => {
window.ezstandalone?.showAds(id);
});
});
// Observe the placeholder for ad content injection by Ezoic.
// If nothing is injected after a timeout, hide the container
// to avoid showing an empty white card.
const el = document.getElementById(`ezoic-pub-ad-placeholder-${id}`);
let observer: MutationObserver | undefined;
let timeoutId: ReturnType<typeof setTimeout> | undefined;
if (el) {
let filled = false;
observer = new MutationObserver(() => {
if (el.childNodes.length > 0 || el.innerHTML.trim().length > 0) {
filled = true;
setHasAdContent(true);
}
});
observer.observe(el, { childList: true, subtree: true });
// If Ezoic doesn't fill the placeholder within 5s, hide it
timeoutId = setTimeout(() => {
if (!filled && el.childNodes.length === 0) {
setHasAdContent(false);
}
}, 5000);
}
return () => {
cancelAnimationFrame(rafId);
observer?.disconnect();
if (timeoutId) clearTimeout(timeoutId);
runEzoic(() => {
window.ezstandalone?.destroyPlaceholders(id);
});
};
}, [id]);
if (!hasAdContent) return null;
return (
<div className="ezoic-ad-container group border rounded-[var(--radius)] overflow-hidden hover:border-foreground/20 transition-colors flex flex-col">
<div className="px-3 py-1.5 border-b bg-muted/50">
<span className="text-[10px] font-medium uppercase tracking-wider text-muted-foreground">
{t("ad")}
</span>
</div>
<div className="ezoic-ad-content overflow-hidden flex items-center justify-center">
{isRendered && <div id={`ezoic-pub-ad-placeholder-${id}`} ref={placeholderRef} />}
</div>
</div>
);
}

Some files were not shown because too many files have changed in this diff Show More