ā§Ļ⧍ āĻŽāĻžāĻ°ā§āϚ, ⧍ā§Ļ⧍ā§Ģ¡8 āĻŽāĻŋāύāĻŋāϟ āĻĒāĻĄāĻŧāϤ⧇

āĻĄā§‡āĻ­, āĻ¸ā§āĻŸā§‡āϜāĻŋāĻ‚, āĻĒā§āϰ⧋āĻĄ-āĻāϰ āϜāĻ¨ā§āϝ āĻ—ā§‹āĻĒāύ āĻ“ āĻ•āύāĻĢāĻŋāĻ—āĻžāϰ⧇āĻļāύ āĻŽā§āϝāĻžāύ⧇āϜāĻŽā§‡āĻ¨ā§āϟ

āĻĄā§‡āĻ­, āĻ¸ā§āĻŸā§‡āϜāĻŋāĻ‚, āĻ“ āĻĒā§āϰ⧋āĻĄ-āĻ API āϕ⧀, SMTP āĻ•ā§āϰ⧇āĻĄā§‡āύāĻļāĻŋāϝāĻŧāĻžāϞ āĻ“ webhook āϏāĻŋāĻ•ā§āϰ⧇āϟ āϞāĻŋāĻ• āĻ›āĻžāĻĄāĻŧāĻžāχ āĻ•āύāĻĢāĻŋāĻ—āĻžāϰ⧇āĻļāύ āĻ“ āϏāĻŋāĻ•ā§āϰ⧇āϟ āĻŽā§āϝāĻžāύ⧇āϜ āĻ•āϰ⧁āĻ¨â€”āϏāĻšāϜ āĻĒā§āϝāĻžāϟāĻžāĻ°ā§āύ āĻ“ āĻšā§‡āĻ•āϞāĻŋāĻ¸ā§āϟ āϏāĻšāĨ¤

āĻĄā§‡āĻ­, āĻ¸ā§āĻŸā§‡āϜāĻŋāĻ‚, āĻĒā§āϰ⧋āĻĄ-āĻāϰ āϜāĻ¨ā§āϝ āĻ—ā§‹āĻĒāύ āĻ“ āĻ•āύāĻĢāĻŋāĻ—āĻžāϰ⧇āĻļāύ āĻŽā§āϝāĻžāύ⧇āϜāĻŽā§‡āĻ¨ā§āϟ

āφāĻŽāϰāĻž āϕ⧀ āϏāĻŽāĻ¸ā§āϝāĻž āϏāĻŽāĻžāϧāĻžāύ āĻ•āϰāĻ›āĻŋ

āĻ—ā§‹āĻĒāύāĻŽā§‚āĻ˛ā§āϝ āĻāĻŦāĻ‚ āĻ•āύāĻĢāĻŋāĻ—āĻžāϰ⧇āĻļāύ āĻŽā§āϝāĻžāύ⧇āϜāĻŽā§‡āĻ¨ā§āϟ āύāĻŋāϝāĻŧ⧇ āĻ•āĻžāϜāϟāĻŋ āĻšāϞ āϏāĻ‚āĻŦ⧇āĻĻāύāĻļā§€āϞ āĻŽāĻžāύāϗ⧁āϞ⧋ āĻāĻŽāύ āĻ¸ā§āĻĨāĻžāύ⧇ āϰāĻžāĻ–āĻž āϝāĻžāϤ⧇ āϤāĻž āĻĻ⧁āĻ°ā§āϘāϟāύāĻžāĻŦāĻļāϤ āĻ•āĻĒāĻŋ, āϕ⧇āĻļ āĻŦāĻž āĻļ⧇āϝāĻŧāĻžāϰ āύāĻž āĻšāϝāĻŧ⧇ āϝāĻžāϝāĻŧāĨ¤

āĻāĻ•āϟāĻŋ secret (āĻ—ā§‹āĻĒāύ) āĻšāϞ⧋ āĻāĻŽāύ āĻ•āĻŋāϛ⧁ āϝāĻž āĻ…ā§āϝāĻžāĻ•ā§āϏ⧇āϏ āĻĻ⧇āϝāĻŧ āĻŦāĻž āĻĒāϰāĻŋāϚāϝāĻŧ āĻĒā§āϰāĻŽāĻžāĻŖ āĻ•āϰ⧇ — āϝ⧇āĻŽāύ API āϕ⧀, āĻĄāĻžāϟāĻžāĻŦ⧇āϏ āĻĒāĻžāϏāĻ“āϝāĻŧāĻžāĻ°ā§āĻĄ, SMTP āϞāĻ—āχāύ, āĻŦāĻž webhook signing secretāĨ¤ āϏāĻžāϧāĻžāϰāĻŖ config āĻšāϞ⧋ āĻāĻŽāύ āĻŽāĻžāύ āϝāĻž āĻĒā§āϰāĻ•āĻžāĻļ āĻ•āϰāĻž āϗ⧇āϞ⧇āĻ“ āĻ•ā§āώāϤāĻŋ āĻšāϝāĻŧ āύāĻž, āϝ⧇āĻŽāύ āĻāĻ•āϟāĻŋ āĻĢāĻŋāϚāĻžāϰ āĻĢā§āĻ˛ā§āϝāĻžāϗ⧇āϰ āύāĻžāĻŽ, āϟāĻžāχāĻŽāφāωāϟ, āĻŦāĻž āĻĒāĻžāĻŦāϞāĻŋāĻ• āϏāĻžāχāĻŸā§‡āϰ āĻŦ⧇āϏ URLāĨ¤

Dev, staging, āĻāĻŦāĻ‚ prod-āĻ āφāϞāĻžāĻĻāĻž āĻŽāĻžāύ āĻĨāĻžāĻ•āĻž āωāϚāĻŋāϤ āĻ•āĻžāϰāĻŖ āϤāĻžāĻĻ⧇āϰ āωāĻĻā§āĻĻ⧇āĻļā§āϝ āφāϞāĻžāĻĻāĻžāĨ¤ Dev āĻĻā§āϰ⧁āϤ āĻĒāϰ⧀āĻ•ā§āώāĻž-āĻĒāϰāĻŋāĻ•ā§āώāĻžāϰ āϜāĻ¨ā§āϝ, staging āĻĒā§āϰ⧋āĻĄāĻžāĻ•āĻļāύ⧇āϰ āĻ…āύ⧁āϰ⧂āĻĒ āĻĻ⧇āĻ–āϤ⧇ āĻ•āĻŋāĻ¨ā§āϤ⧁ āĻŦāĻŋāĻšā§āĻ›āĻŋāĻ¨ā§āύ āĻĨāĻžāĻ•āĻžāϰ āϜāĻ¨ā§āϝ, āĻāĻŦāĻ‚ prod-āϕ⧇ āϞāĻ•āĻĄāĻžāωāύ, āĻ…āĻĄāĻŋāϟāϝ⧋āĻ—ā§āϝ āĻ“ āĻ¸ā§āĻĨāĻŋāϤāĻŋāĻļā§€āϞ āϰāĻžāĻ–āϤ⧇ āĻšāϝāĻŧāĨ¤ āĻāĻ•āχ āĻ—ā§‹āĻĒāύ āϏāĻŦ āϜāĻžāϝāĻŧāĻ—āĻžāϝāĻŧ reuse āĻ•āϰāϞ⧇ dev-āĻ āϕ⧋āύ⧋ āϞāĻŋāĻ• āĻĨāĻžāĻ•āϞ⧇āχ āϤāĻž āĻĒā§āϰ⧋āĻĄāĻžāĻ•āĻļāύ⧇ breach-āĻ āĻĒāϰāĻŋāĻŖāϤ āĻšāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤

“Leaking into builds” āĻŦāϞāϤ⧇ āĻŦā§‹āĻāĻžāϝāĻŧ āϕ⧋āύ⧋ āĻ—ā§‹āĻĒāύ āĻāĻŽāύ āĻ•āĻŋāϛ⧁āϤ⧇ āĻĸ⧁āϕ⧇ āϝāĻžāĻ“āϝāĻŧāĻž āϝāĻž āĻĒā§āϝāĻžāϕ⧇āϜ āĻšāϝāĻŧ⧇ āĻļ⧇āϝāĻŧāĻžāϰ āĻšāϝāĻŧ, āϝ⧇āĻŽāύ āĻ•āĻŽā§āĻĒāĻžāχāϞ āĻ•āϰāĻž āĻŦā§āϝāĻžāĻ•āĻāĻ¨ā§āĻĄ āĻŦāĻžāχāύāĻžāϰāĻŋ, āĻŽā§‹āĻŦāĻžāχāϞ āĻ…ā§āϝāĻžāĻĒ āĻŦāĻžāĻ¨ā§āĻĄā§‡āϞ, āĻŦāĻž āĻĢā§āϰāĻ¨ā§āϟ-āĻāĻ¨ā§āĻĄ āĻŦāĻžāĻ¨ā§āĻĄāϞāĨ¤ āĻāĻ•āĻŦāĻžāϰ āĻ—ā§‹āĻĒāύ āϕ⧋āύ⧋ āĻŦāĻŋāĻ˛ā§āĻĄ āφāĻ°ā§āϟāĻŋāĻĢā§āϝāĻžāĻ•ā§āĻŸā§‡ āϗ⧇āϞ⧇ āϤāĻž āĻāĻŽāύ āϜāĻžāϝāĻŧāĻ—āĻžāϝāĻŧ āĻĒ⧌āρāϛ⧇ āϝāĻžāĻŦ⧇ āϝāĻž āφāĻĒāύāĻŋ āύāĻŋāϝāĻŧāĻ¨ā§āĻ¤ā§āϰāĻŖ āĻ•āϰ⧇āύ āύāĻžāĨ¤

āĻ…ā§āϝāĻžāĻ•ā§āϏāĻŋāĻĄā§‡āĻ¨ā§āϟāĻžāϞ āϞāĻŋāĻ• āϏāĻžāϧāĻžāϰāĻŖāϤ āĻ•āϝāĻŧ⧇āĻ•āϟāĻŋ āĻĒā§āϰāĻ¤ā§āϝāĻžāĻļāĻŋāϤ āĻĒāĻĨ āĻĻāĻŋāϝāĻŧ⧇ āϘāĻŸā§‡:

  • āϏ⧋āĻ°ā§āϏ āϕ⧋āĻĄ, āĻ¸ā§āϝāĻžāĻŽā§āĻĒāϞ āĻŦāĻž āĻ•āĻŽā§‡āĻ¨ā§āĻŸā§‡ āĻ—ā§‹āĻĒāύ āĻšāĻžāĻ°ā§āĻĄāϕ⧋āĻĄ āĻ•āϰāĻž
  • āϞ⧋āĻ•āĻžāϞ .env āĻĢāĻžāχāϞ āĻŦāĻž āĻ•āύāĻĢāĻŋāĻ— āĻāĻ•ā§āϏāĻĒā§‹āĻ°ā§āϟ āϰ⧇āĻĒā§‹āϤ⧇ āĻ•āĻŽāĻŋāϟ āĻ•āϰāĻž
  • āĻĢā§āϰāĻ¨ā§āϟ-āĻāĻ¨ā§āĻĄ āĻŦāĻž āĻŽā§‹āĻŦāĻžāχāϞ āĻŦāĻŋāĻ˛ā§āĻĄā§‡ āĻ—ā§‹āĻĒāύ āĻŦ⧇āĻ• āĻ•āϰāĻž āϝāĻž āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϰ āĻĄāĻŋāĻ­āĻžāχāϏ⧇ āϚāϞ⧇
  • āϞāĻ—, āĻ•ā§āĻ°ā§āϝāĻžāĻļ āϰāĻŋāĻĒā§‹āĻ°ā§āϟ āĻŦāĻž āĻŦāĻŋāĻ˛ā§āĻĄ āφāωāϟāĻĒ⧁āĻŸā§‡ āĻ—ā§‹āĻĒāύ āĻĒā§āϰāĻŋāĻ¨ā§āϟ āĻ•āϰāĻž
  • "āĻāĻ•āϟ⧁ āĻĒāϰ⧀āĻ•ā§āώāĻž āĻ•āϰ⧇ āĻĻ⧇āĻ–āĻžāϰ āϜāĻ¨ā§āϝ" āĻĒā§āϰ⧋āĻĄāĻžāĻ•āĻļāύ⧇āϰ āĻŽāĻžāύāϗ⧁āϞ⧋ āĻ¸ā§āĻŸā§‡āϜāĻŋāĻ‚-āĻ āĻ•āĻĒāĻŋ āĻ•āϰāĻž

āĻāĻ•āϟāĻŋ āϏāĻšāϜ āωāĻĻāĻžāĻšāϰāĻŖ: āĻāĻ•āϜāύ āĻĄā§‡āĻ­ SMTP āĻĒāĻžāϏāĻ“āϝāĻŧāĻžāĻ°ā§āĻĄ āĻ•āύāĻĢāĻŋāĻ— āĻĢāĻžāχāϞ⧇ āϝ⧋āĻ— āĻ•āϰ⧇ āϝāĻžāϤ⧇ “āχāĻŽā§‡āχāϞ āĻ•āĻžāϜ āĻ•āϰ⧇,” āϤāĻžāϰāĻĒāϰ āĻĢāĻžāχāϞāϟāĻŋ āĻ•āĻŽāĻŋāϟ āĻŦāĻž āϰāĻŋāϞāĻŋāϜ āĻŦāĻŋāĻ˛ā§āĻĄā§‡ āĻĒā§āϝāĻžāϕ⧇āϜ āĻšāϝāĻŧ⧇ āϝāĻžāϝāĻŧāĨ¤ āĻĒāĻžāϏāĻ“āϝāĻŧāĻžāĻ°ā§āĻĄ āĻĒāϰ⧇ āϰ⧋āĻŸā§‡āϟ āĻ•āϰāϞ⧇āĻ“ āĻĒ⧁āϰāĻžāύ⧋ āĻŦāĻŋāĻ˛ā§āĻĄ CI āϕ⧇āĻļ⧇, āĻ…ā§āϝāĻžāĻĒ āĻ¸ā§āĻŸā§‹āϰ āφāĻĒāϞ⧋āĻĄā§‡, āĻŦāĻž āĻ•āĻžāϰ⧋ āĻĄāĻžāωāύāϞ⧋āĻĄ āĻĢā§‹āĻ˛ā§āĻĄāĻžāϰ⧇ āĻĨāĻžāĻ•āϤ⧇ āĻĒāĻžāϰ⧇āĨ¤

āϞāĻ•ā§āĻˇā§āϝ āϏāĻšāϜ: āĻ—ā§‹āĻĒāύāϗ⧁āϞ⧋ āϕ⧋āĻĄ āĻ“ āĻŦāĻŋāĻ˛ā§āĻĄā§‡āϰ āĻŦāĻžāχāϰ⧇ āϰāĻžāϖ⧁āύ, āĻāĻŦāĻ‚ āĻĒā§āϰāϤāĻŋāϟāĻŋ āĻāύāĻ­āĻžāϝāĻŧāϰāύāĻŽā§‡āĻ¨ā§āĻŸā§‡ āϏāĻ āĻŋāĻ• āĻŽāĻžāύ āϰāĻžāύāϟāĻžāχāĻŽā§‡ āĻŦāĻž āĻāĻ•āϟāĻŋ āϏāĻŋāĻ•āĻŋāωāϰ āĻĄāĻŋāĻĒā§āϞāϝāĻŧāĻŽā§‡āĻ¨ā§āϟ āĻ¸ā§āĻŸā§‡āĻĒ⧇ āχāύāĻœā§‡āĻ•ā§āϟ āĻ•āϰ⧁āύāĨ¤

āĻāĻŽāύ āĻŽā§ŒāϞāĻŋāĻ• āύ⧀āϤāĻŋāĻŽāĻžāϞāĻž āϝāĻž āĻŦ⧇āĻļāĻŋāϰāĻ­āĻžāĻ— āϞāĻŋāĻ• āϰ⧋āϧ āĻ•āϰ⧇

āĻ…āϧāĻŋāĻ•āĻžāĻ‚āĻļ āϏ⧇āĻĢāϟāĻŋ āφāϏ⧇ āĻ•āϝāĻŧ⧇āĻ•āϟāĻŋ āĻ…āĻ­ā§āϝāĻžāϏ āĻĨ⧇āϕ⧇ āϝāĻž āφāĻĒāύāĻŋ āĻĒā§āϰāϤāĻŋāĻŦāĻžāϰ āĻ…āύ⧁āϏāϰāĻŖ āĻ•āϰāĻŦ⧇āύāĨ¤

āĻ—ā§‹āĻĒāύāϗ⧁āϞ⧋ āϕ⧋āĻĄ āĻ“ āĻŦāĻŋāĻ˛ā§āĻĄ āφāωāϟāĻĒ⧁āϟ āĻĨ⧇āϕ⧇ āĻĻā§‚āϰ⧇ āϰāĻžāϖ⧁āύāĨ¤ āϕ⧋āĻĄ āĻ›āĻĄāĻŧāĻžāϝāĻŧ—āĻ•āĻĒāĻŋ āĻšāϝāĻŧ, āϰāĻŋāĻ­āĻŋāω āĻšāϝāĻŧ, āϞāĻ— āĻšāϝāĻŧ, āϕ⧇āĻļ āĻšāϝāĻŧ, āφāĻĒāϞ⧋āĻĄ āĻšāϝāĻŧāĨ¤ āĻŦāĻŋāĻ˛ā§āĻĄāĻ“ āĻ›āĻĄāĻŧāĻžāϝāĻŧ: āφāĻ°ā§āϟāĻŋāĻĢā§āϝāĻžāĻ•ā§āϟ CI āϞāĻ—, āĻ…ā§āϝāĻžāĻĒ āĻŦāĻžāĻ¨ā§āĻĄāϞ, āĻ•āύāĻŸā§‡āχāύāĻžāϰ āϰ⧇āϜāĻŋāĻ¸ā§āĻŸā§āϰāĻŋ āĻŦāĻž āĻļ⧇āϝāĻŧāĻžāĻ°ā§āĻĄ āĻĢā§‹āĻ˛ā§āĻĄāĻžāϰ⧇ āĻĒ⧌āρāϛ⧇ āϝ⧇āϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ āϝ⧇āϟāĻž āĻ•āĻŽāĻŋāϟ āĻŦāĻž āĻ•āĻŽā§āĻĒāĻžāχāϞ āĻšāϝāĻŧ, āϏ⧇āϟāĻžāϕ⧇ āĻĒāĻžāĻŦāϞāĻŋāĻ• āĻ­āĻžāĻŦ⧁āύāĨ¤

āĻĒā§āϰāϤāĻŋāϟāĻŋ āĻāύāĻ­āĻžāϝāĻŧāϰāύāĻŽā§‡āĻ¨ā§āĻŸā§‡āϰ āϜāĻ¨ā§āϝ āφāϞāĻžāĻĻāĻž āĻ•ā§āϰ⧇āĻĄā§‡āύāĻļāĻŋāϝāĻŧāĻžāϞ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧁āύ (least privilege)āĨ¤ āφāĻĒāύāĻžāϰ dev āϕ⧀ āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ dev-āĻ āĻ•āĻžāϜ āĻ•āϰāĻž āωāϚāĻŋāϤ āĻāĻŦāĻ‚ āϏ⧇āϟāĻž āĻ•āĻŋ āĻ•āĻŋ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇ āϤāĻž āϏ⧀āĻŽāĻŋāϤ āϰāĻžāĻ–āĻž āωāϚāĻŋāϤāĨ¤ āĻ˛ā§āϝāĻžāĻĒāϟāĻĒ āĻŦāĻž āĻŸā§‡āĻ¸ā§āϟ āϏāĻžāĻ°ā§āĻ­āĻžāϰ āĻĨ⧇āϕ⧇ āϕ⧀ āϞāĻŋāĻ• āĻšāϞ⧇ āĻ•ā§āώāϤāĻŋ āϏ⧀āĻŽāĻŋāϤ āĻĨāĻžāϕ⧇āĨ¤ āĻāĻ•āχ āϧāĻžāϰāĻŖāĻž SMTP āχāωāϜāĻžāϰ, āĻĄāĻžāϟāĻžāĻŦ⧇āϏ āĻĒāĻžāϏāĻ“āϝāĻŧāĻžāĻ°ā§āĻĄ, āĻ“ webhook āϏāĻŋāĻ•ā§āϰ⧇āĻŸā§‡ āĻĒā§āϰāϝ⧋āĻœā§āϝāĨ¤

āϰ⧋āĻŸā§‡āĻļāύāϕ⧇ āϏāĻžāϧāĻžāϰāĻŖ āĻ•āϰ⧁āύāĨ¤ āϧāϰ⧇ āύāĻŋāύ āφāĻĒāύāĻŋ āĻ—ā§‹āĻĒāύ āϰ⧋āĻŸā§‡āϟ āĻ•āϰāĻŦ⧇āύ; āϤāĻžāχ āĻĄāĻŋāϜāĻžāχāύ āĻāĻŽāύ āĻ•āϰ⧁āύ āϝāĻžāϤ⧇ āĻŽāĻžāύ āĻŦāĻĻāϞāĻžāϤ⧇ āϕ⧋āĻĄ āĻāĻĄāĻŋāϟ āĻŦāĻž āϏāĻŦ āĻ…ā§āϝāĻžāĻĒ āĻĒ⧁āύāϰāĻžāϝāĻŧ āĻŦāĻŋāĻ˛ā§āĻĄ āĻ•āϰāĻžāϰ āĻĻāϰāĻ•āĻžāϰ āύāĻž āĻĒāĻĄāĻŧ⧇āĨ¤ āĻ…āύ⧇āĻ• āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽā§‡ āĻāϰ āĻŽāĻžāύ⧇ āĻšāϞ⧋ āϰ⧁āϟāϟāĻžāχāĻŽā§‡ āϏāĻŋāĻ•ā§āϰ⧇āϟ āĻĒāĻĄāĻŧāĻž (āĻāύāĻ­āĻžāϝāĻŧāϰāύāĻŽā§‡āĻ¨ā§āϟ āĻ­ā§āϝāĻžāϰāĻŋāϝāĻŧ⧇āĻŦāϞ āĻŦāĻž āϏāĻŋāĻ•ā§āϰ⧇āϟ āĻ¸ā§āĻŸā§‹āϰ āĻĨ⧇āϕ⧇) āĻāĻŦāĻ‚ āĻŸā§āϰāĻžāύāϜāĻŋāĻļāύ⧇āϰ āϏāĻŽāϝāĻŧ āĻāĻ•āĻžāϧāĻŋāĻ• āϏāĻŋāĻ•ā§āϰ⧇āϟ āϏāĻŽāĻ°ā§āĻĨāύ āĻ•āϰāĻžāĨ¤

āĻ…ā§āϝāĻžāĻ•āϏ⧇āϏ āϏ⧀āĻŽāĻžāĻŦāĻĻā§āϧ āĻ“ āϞāĻ— āĻ•āϰ⧁āύāĨ¤ āĻ—ā§‹āĻĒāύ āϕ⧇āĻŦāϞ āϏ⧇āχ āϏāĻžāĻ°ā§āĻ­āĻŋāϏāχ āĻĒāĻĄāĻŧāϤ⧇ āĻĒāĻžāϰāĻŦ⧇ āϝ⧇āϟāĻž āĻĻāϰāĻ•āĻžāϰ, āĻāĻŦāĻ‚ āĻļ⧁āϧ⧁ āϏ⧇āχ āĻāύāĻ­āĻžāϝāĻŧāϰāύāĻŽā§‡āĻ¨ā§āĻŸā§‡ āϝ⧇āĻ–āĻžāύ⧇ āϚāϞ⧇āĨ¤ āĻŽāĻžāύ⧁āώāĻĻ⧇āϰ āĻ…ā§āϝāĻžāĻ•āϏ⧇āϏ āĻ•āĻŽ, āϏāĻŽāϝāĻŧāϏ⧀āĻŽāĻžāĻŦāĻĻā§āϧ āĻāĻŦāĻ‚ āĻ…āĻĄāĻŋāĻŸā§‡āĻŦāϞ āϰāĻžāϖ⧁āύāĨ¤

āĻāĻ•āϟāĻŋ āϛ⧋āϟ āϰ⧁āϞāϏ⧇āϟ āϝāĻž āĻŦ⧇āĻļāĻŋāϰāĻ­āĻžāĻ— āϕ⧇āϏ āĻ•āĻ­āĻžāϰ āĻ•āϰāĻŦ⧇:

  • āĻ—ā§‹āĻĒāύ āĻ•āĻŽāĻŋāϟ āĻ•āϰāĻŦ⧇āύ āύāĻž āĻŦāĻž āϟāĻŋāĻ•āĻŋāĻŸā§‡, āĻšā§āϝāĻžāĻŸā§‡, āĻ¸ā§āĻ•ā§āϰāĻŋāύāĻļāĻŸā§‡ āĻĒ⧇āĻ¸ā§āϟ āĻ•āϰāĻŦ⧇āύ āύāĻžāĨ¤
  • dev, staging, āĻāĻŦāĻ‚ prod-āĻāϰ āϜāĻ¨ā§āϝ āφāϞāĻžāĻĻāĻž āĻ•ā§āϰ⧇āĻĄā§‡āύāĻļāĻŋāϝāĻŧāĻžāϞ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧁āύāĨ¤
  • āĻŦāĻŋāĻ˛ā§āĻĄā§‡ āĻŽāĻžāύ āĻŦ⧇āĻ• āĻ•āϰāĻžāϰ āĻšā§‡āϝāĻŧ⧇ āϰāĻžāύāϟāĻžāχāĻŽ āĻ•āύāĻĢāĻŋāĻ— āĻĒā§āϰ⧇āĻĢāĻžāϰ āĻ•āϰ⧁āύāĨ¤
  • āϏāĻžāĻ¸ā§āĻĒāĻŋāĻļāĻžāϏ āĻāĻ•ā§āϏāĻĒā§‹āϜāĻžāϰ⧇āϰ āĻĒāϰ⧇ āĻŦāĻž āϏāĻŽāϝāĻŧāĻŽāϤ āϰ⧋āĻŸā§‡āϟ āĻ•āϰ⧁āύāĨ¤
  • āϕ⧇ āĻāĻŦāĻ‚ āϕ⧀ āĻĒāĻĄāĻŧāϤ⧇ āĻĒāĻžāϰ⧇ āϏ⧇āϟāĻž āϏ⧀āĻŽāĻžāĻŦāĻĻā§āϧ āĻ•āϰ⧁āύ āĻāĻŦāĻ‚ āĻ…ā§āϝāĻžāĻ•ā§āϏ⧇āϏ āϞāĻ— āϰāĻžāϖ⧁āύāĨ¤

āĻāχ āύ⧀āϤāĻŋāϗ⧁āϞ⧋ āϏāĻžāϧāĻžāϰāĻŖ āϕ⧋āĻĄ āĻ¸ā§āĻŸā§āϝāĻžāĻ• āĻŦāĻž AppMaster-āĻāϰ āĻŽāϤ⧋ no-code āĻĒā§āĻ˛ā§āϝāĻžāϟāĻĢāĻ°ā§āĻŽ āĻĻ⧁āĻŸā§‹āϤ⧇āχ āĻĒā§āϰāϝ⧋āĻœā§āϝāĨ¤ āύāĻŋāϰāĻžāĻĒāĻĻ āĻĒāĻĨ āĻāĻ•āχ: āĻ—ā§‹āĻĒāύāϗ⧁āϞ⧋ āĻŦāĻŋāĻ˛ā§āĻĄā§‡āϰ āĻŦāĻžāχāϰ⧇ āϰāĻžāϖ⧁āύ āĻāĻŦāĻ‚ āϝ⧇āĻ–āĻžāύ⧇ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻšāĻŦ⧇ āϏ⧇āĻ–āĻžāύ⧇ āĻ•āĻĄāĻŧāĻž āϏ⧀āĻŽāĻžāĻŦāĻĻā§āϧ āĻ•āϰ⧁āύāĨ¤

āĻ—ā§‹āĻĒāύ āϕ⧋āĻĨāĻž āĻĨ⧇āϕ⧇ āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āĻŦ⧇āĻļāĻŋ āϞāĻŋāĻ• āĻšāϝāĻŧ

āĻŦ⧇āĻļāĻŋāϰāĻ­āĻžāĻ— āϞāĻŋāĻ• “āĻšā§āϝāĻžāĻ•â€ āύāϝāĻŧ—āϏ⧇āϗ⧁āϞ⧋ āϏāĻžāϧāĻžāϰāĻŖ āĻ•āĻžāĻœā§‡āϰ āϏāĻŽāϝāĻŧ āϘāĻŸā§‡: āĻĻā§āϰ⧁āϤ āĻāĻ•āϟāĻŋ āĻŸā§‡āĻ¸ā§āϟ, āĻāĻ•āϟāĻŋ āϏāĻšāĻžāϝāĻŧāĻ• āĻ¸ā§āĻ•ā§āϰāĻŋāύāĻļāϟ, āĻāĻŽāύ āĻāĻ•āϟāĻŋ āĻŦāĻŋāĻ˛ā§āĻĄ āϝāĻž āĻŦ⧇āĻļāĻŋ āĻĒā§āϰāĻŋāĻ¨ā§āϟ āĻ•āϰ⧇āĨ¤ āĻļ⧁āϰ⧁ āĻ•āϰāĻžāϰ āĻ­āĻžāϞ⧋ āϜāĻžāϝāĻŧāĻ—āĻž āĻšāĻšā§āϛ⧇ āϜāĻžāύāĻž āϝ⧇ āϛ⧋āϟ āĻ¤ā§āϰ⧁āϟāĻŋāϗ⧁āϞ⧋ āϏāĻžāϧāĻžāϰāĻŖāϤ āϕ⧋āĻĨāĻžāϝāĻŧ āϘāĻŸā§‡āĨ¤

Source control āĻšāϞ⧋ āĻ•ā§āϞāĻžāϏāĻŋāĻ•āϞāĨ¤ āϕ⧇āω āĻāĻ•āϟāĻŋ API āϕ⧀ āĻ•āύāĻĢāĻŋāĻ— āĻĢāĻžāχāϞ⧇ āĻĒ⧇āĻ¸ā§āϟ āĻ•āϰ⧇ “āχāϤāĻŋāĻŽāĻ§ā§āĻ¯ā§‡â€ āĻŦāϞ⧇ āĻ•āĻŽāĻŋāϟ āĻ•āϰ⧇, āĻāĻŦāĻ‚ āϏ⧇āϟāĻž āĻŦā§āϰāĻžāĻžā§āϚ, āĻĒ⧁āϞ āϰāĻŋāϕ⧋āϝāĻŧ⧇āĻ¸ā§āϟ, āĻ“ āϕ⧋āĻĄ āϰāĻŋāĻ­āĻŋāωāϝāĻŧ⧇āϰ āĻŽāĻ§ā§āϝ⧇ āĻ›āĻĄāĻŧāĻŋāϝāĻŧ⧇ āĻĒāĻĄāĻŧ⧇āĨ¤ āĻĒāϰ⧇ āϏ⧇āϟāĻŋ āϏāϰāĻžāύ⧋ āĻšāϞ⧇āĻ“, āĻ—ā§‹āĻĒāύ āχāϤāĻŋāĻšāĻžāϏ⧇ āĻŦāĻž āĻ•āĻĒāĻŋ āĻ•āϰāĻž āĻĒā§āϝāĻžāĻšā§‡ āϚāĻŋāϰāĻ•āĻžāϞ āĻĨāĻžāĻ•āϤ⧇ āĻĒāĻžāϰ⧇āĨ¤

āϝāĻž āĻ•āĻŋāϛ⧁ āχāωāϜāĻžāϰāϕ⧇ āĻļāĻŋāĻĒ āĻ•āϰ⧇āύ āϏ⧇āϟāĻžāĻ“ āĻŦāĻĄāĻŧ āϞāĻŋāĻ• āϏ⧋āĻ°ā§āϏāĨ¤ āĻĢā§āϰāĻ¨ā§āϟ-āĻāĻ¨ā§āĻĄ āĻŦāĻžāĻ¨ā§āĻĄāϞ āĻāĻŦāĻ‚ āĻŽā§‹āĻŦāĻžāχāϞ āĻŦāĻžāχāύāĻžāϰāĻŋ āĻĒāϰ⧀āĻ•ā§āώāĻž āĻ•āϰ⧇ āĻĻ⧇āĻ–āĻž āϏāĻšāϜāĨ¤ āϝāĻĻāĻŋ āĻ—ā§‹āĻĒāύ JavaScript-āĻ āĻĨāĻžāϕ⧇, iOS/Android āĻ…ā§āϝāĻžāĻĒ āĻŦāĻž ‘āĻŦ⧇āĻ• āĻ•āϰāĻžâ€™ āĻ•āύāĻĢāĻŋāϗ⧇ āĻĨāĻžāϕ⧇, āϧāϰ⧇ āύāĻŋāύ āϏ⧇āϟāĻž āĻĒāĻžāĻŦāϞāĻŋāĻ•āĨ¤ āĻ•ā§āϞāĻžāϝāĻŧ⧇āĻ¨ā§āϟ āĻ…ā§āϝāĻžāĻĒāϗ⧁āϞ⧋ āĻĒāĻžāĻŦāϞāĻŋāĻ• āφāχāĻĄā§‡āĻ¨ā§āϟāĻŋāĻĢāĻžāϝāĻŧāĻžāϰ āϰāĻžāĻ–āϤ⧇ āĻĒāĻžāϰ⧇, āϤāĻŦ⧇ āĻĒā§āϰāĻžāχāϭ⧇āϟ āĻ•āĻŋ āϰāĻžāĻ–āĻŦ⧇ āύāĻžāĨ¤

āĻ—ā§‹āĻĒāύāϗ⧁āϞ⧋ "āϏāĻšāĻžāϝāĻŧāĻ• āĻļāĻŦā§āĻĻāĻļ⧃āĻ™ā§āĻ–āϞ" āĻšāĻŋāϏ⧇āĻŦ⧇ āĻ…āĻŸā§‹āĻŽā§‡āĻļāύ āĻ“ āϏāĻžāĻĒā§‹āĻ°ā§āĻŸā§‡āĻ“ āϞāĻŋāĻ• āĻšāϝāĻŧāĨ¤ āϏāĻžāϧāĻžāϰāĻŖ āωāĻĻāĻžāĻšāϰāĻŖ: CI āϞāϗ⧇ āĻāύāĻ­āĻžāϝāĻŧāϰāύāĻŽā§‡āĻ¨ā§āϟ āĻ­ā§āϝāĻžāϰāĻŋāϝāĻŧ⧇āĻŦāϞ āχāϕ⧋ āĻ•āϰāĻž, āĻĄāĻŋāĻŦāĻžāĻ— āĻĒā§āϰāĻŋāĻ¨ā§āĻŸā§‡ SMTP āĻ•ā§āϰ⧇āĻĄā§‡āύāĻļāĻŋāϝāĻŧāĻžāϞ āĻĨāĻžāĻ•āĻž, āĻ•ā§āĻ°ā§āϝāĻžāĻļ āϰāĻŋāĻĒā§‹āĻ°ā§āĻŸā§‡ āĻ•āύāĻĢāĻŋāĻ— āĻāĻŦāĻ‚ āφāωāϟāĻŦāĻžāωāĻ¨ā§āĻĄ āϰāĻŋāϕ⧋āϝāĻŧ⧇āĻ¸ā§āϟāϰ āĻ•ā§āϝāĻžāĻĒāϚāĻžāϰ āĻ•āϰāĻž, āĻ•āύāĻŸā§‡āχāύāĻžāϰ āχāĻŽā§‡āϜ āĻ“ āĻŦāĻŋāĻ˛ā§āĻĄ āϕ⧇āĻļ⧇ .env āĻĢāĻžāχāϞ āĻĢ⧇āϞ⧇ āϰāĻžāĻ–āĻž, āĻāĻŦāĻ‚ āϏāĻžāĻĒā§‹āĻ°ā§āϟ āϟāĻŋāϕ⧇āĻŸā§‡ āĻ•āĻĒāĻŋ āĻ•āϰāĻž āϞāĻ— āĻŦāĻž āĻ¸ā§āĻ•ā§āϰāĻŋāύāĻļāϟāĨ¤

āĻāĻ•āϟāĻŋ āϏāĻžāϧāĻžāϰāĻŖ āĻĒā§āϝāĻžāϟāĻžāĻ°ā§āύ āĻšāϞ⧋ āĻāĻ•āĻŦāĻžāϰ āĻ—ā§‹āĻĒāύ āĻŦāĻŋāĻ˛ā§āĻĄ āĻĒāĻžāχāĻĒāϞāĻžāχāύ⧇ āĻĸ⧁āĻ•āϞ⧇ āϏ⧇āϟāĻž āĻĒāϰ⧇ āĻ•āĻĒāĻŋ āĻšāϝāĻŧ⧇ āϝāĻžāϝāĻŧ: āĻ•āύāĻŸā§‡āχāύāĻžāϰ āϞ⧇āϝāĻŧāĻžāϰ⧇, āϕ⧇āĻļāĻĄ āφāĻ°ā§āϟāĻŋāĻĢā§āϝāĻžāĻ•ā§āĻŸā§‡, āϞāϗ⧇, āφāϰ āϟāĻŋāϕ⧇āĻŸā§‡āĨ¤ āϏāĻŽāĻžāϧāĻžāύ āϏāĻžāϧāĻžāϰāĻŖāϤ āĻāĻ• āϟ⧁āϞ āύāϝāĻŧ—āĻāϟāĻŋ āĻ…āĻ­ā§āϝāĻžāϏ: āĻ—ā§‹āĻĒāύāϗ⧁āϞ⧋ āϕ⧋āĻĄ, āĻŦāĻŋāĻ˛ā§āĻĄ āĻāĻŦāĻ‚ āĻŽāĻžāύ⧁āώ⧇āϰ āĻĒ⧇āĻ¸ā§āϟ āĻ•āϰāĻž āĻ•āĻŋāϛ⧁āϰ āĻŦāĻžāχāϰ⧇ āϰāĻžāϖ⧁āύāĨ¤

āϏāĻžāϧāĻžāϰāĻŖ āĻ—ā§‹āĻĒāύ āϧāϰāύ⧇āϰ āĻā§āρāĻ•āĻŋ

āϕ⧋āύ āϧāϰāύ⧇āϰ āĻ—ā§‹āĻĒāύ āϤāĻž āϜāĻžāύāĻž āϏāĻžāĻšāĻžāĻ¯ā§āϝ āĻ•āĻ°ā§‡â€”āϞāĻŋāĻ• āĻšāϞ⧇ āϕ⧀ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇ āĻāĻŦāĻ‚ āϕ⧋āĻĨāĻžāϝāĻŧ āĻ•āĻ–āύ⧋āĻ“ āωāĻĒāĻ¸ā§āĻĨāĻŋāϤ āĻšāĻ“āϝāĻŧāĻž āωāϚāĻŋāϤ āύāĻžāĨ¤

API keys (Stripe, maps, analytics, āχāĻ¤ā§āϝāĻžāĻĻāĻŋ) āĻĒā§āϰāĻžāϝāĻŧāχ “āĻĒā§āϰāĻœā§‡āĻ•ā§āϟ āϞ⧇āϭ⧇āĻ˛â€ āĻ•ā§āϰ⧇āĻĄā§‡āύāĻļāĻŋāϝāĻŧāĻžāϞāĨ¤ āĻāϗ⧁āϞ⧋ āφāĻĒāύāĻžāϰ āĻ…ā§āϝāĻžāĻĒāϕ⧇ āĻļāύāĻžāĻ•ā§āϤ āĻ•āϰ⧇ āĻāĻŦāĻ‚ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āĻ…ā§āϝāĻžāĻ•āĻļāύ āĻ•āϰāϤ⧇ āĻĻ⧇āϝāĻŧ, āϝ⧇āĻŽāύ āĻ•āĻžāĻ°ā§āĻĄ āϚāĻžāĻ°ā§āϜ āĻ•āϰāĻž āĻŦāĻž āχāωāĻœā§‡āϜ āĻ¸ā§āĻŸā§āϝāĻžāϟ āĻĒāĻĄāĻŧāĻžāĨ¤ āĻāϗ⧁āϞ⧋ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀ āĻŸā§‹āϕ⧇āύ āύāϝāĻŧ—āĻŸā§‹āϕ⧇āύ āϏāĻžāϧāĻžāϰāĻŖāϤ āϏ⧇āĻļāύ āĻĒā§āϰāϤāĻŋāύāĻŋāϧāĻŋāĻ¤ā§āĻŦ āĻ•āϰ⧇ āĻāĻŦāĻ‚ āĻļ⧇āώ āĻšāϝāĻŧāĨ¤ āĻ…āύ⧇āĻ• API āϕ⧀ āύāĻŋāĻœā§‡ āĻĨ⧇āϕ⧇ āĻāĻ•ā§āϏāĻĒāĻžāϝāĻŧāĻžāϰ āĻ•āϰ⧇ āύāĻž, āϤāĻžāχ āϞāĻŋāĻ• āĻšāϞ⧇ āĻ•ā§āώāϤāĻŋ āĻŦāĻĄāĻŧ āĻšāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤

SMTP āĻ•ā§āϰ⧇āĻĄā§‡āύāĻļāĻŋāϝāĻŧāĻžāϞ āϏāĻžāϧāĻžāϰāĻŖāϤ āχāωāϜāĻžāϰāύ⧇āĻŽ āĻāĻŦāĻ‚ āĻĒāĻžāϏāĻ“āϝāĻŧāĻžāĻ°ā§āĻĄāĨ¤ āĻāϗ⧁āϞ⧋ āϞāĻŋāĻ• āĻšāϞ⧇ āφāĻ•ā§āϰāĻŽāĻŖāĻ•āĻžāϰ⧀ āφāĻĒāύāĻžāϰ āĻĄā§‹āĻŽā§‡āχāύ āĻĨ⧇āϕ⧇ āĻ¸ā§āĻĒā§āϝāĻžāĻŽ āĻĒāĻžāĻ āĻžāϤ⧇ āĻĒāĻžāϰāĻŦ⧇ āĻāĻŦāĻ‚ āĻĄā§‡āϞāĻŋāĻ­āĻžāϰāĻŋāĻŦāĻŋāϞāĻŋāϟāĻŋ āύāĻˇā§āϟ āĻšāϝāĻŧ⧇ āϝāĻžāĻŦ⧇āĨ¤ API-āĻ­āĻŋāĻ¤ā§āϤāĻŋāĻ• āχāĻŽā§‡āχāϞ āĻĒā§āϰāĻĻāĻžāύāĻ•āĻžāϰ⧀āϰāĻž āĻ•āĻžāρāϚāĻž SMTP āĻĒāĻžāϏāĻ“āϝāĻŧāĻžāĻ°ā§āĻĄā§‡āϰ āĻŦāĻĻāϞ⧇ API āϕ⧀ āĻ“ āĻ¸ā§āϕ⧋āĻĒāĻĄ āĻĒāĻžāϰāĻŽāĻŋāĻļāύ āĻĻ⧇āϝāĻŧ, āϝāĻž āύāĻŋāϰāĻžāĻĒāĻĻ āĻšāϤ⧇ āĻĒāĻžāϰ⧇, āϤāĻŦ⧇ āϝāĻĻāĻŋ āϕ⧀ āĻĻāĻŋāϝāĻŧ⧇ āφāĻĒāύāĻžāϰ āĻāĻ•āĻžāωāĻ¨ā§āϟ āĻĨ⧇āϕ⧇ āĻŽā§‡āχāϞ āĻĒāĻžāĻ āĻžāύ⧋ āϝāĻžāϝāĻŧ āϤāĻŦ⧇ āĻā§āρāĻ•āĻŋ āĻĨāĻžāϕ⧇āĨ¤

Webhook secrets (signing secrets āĻŦāĻž verification keys) āχāύāĻŦāĻžāωāĻ¨ā§āĻĄ āϰāĻŋāϕ⧋āϝāĻŧ⧇āĻ¸ā§āϟāϗ⧁āϞ⧋āϕ⧇ āύāĻŋāϰāĻžāĻĒāĻĻ āϰāĻžāϖ⧇āĨ¤ āϝāĻĻāĻŋ signing secret āϞāĻŋāĻ• āĻšāϝāĻŧ, āϕ⧇āω "payment succeeded" āĻŦāĻž "subscription canceled" āχāϭ⧇āĻ¨ā§āϟ āύāĻ•āϞ āĻ•āϰ⧇ āφāĻĒāύāĻžāϰ āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽāϕ⧇ āĻ āĻ•āĻžāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ āĻā§āρāĻ•āĻŋ āϕ⧇āĻŦāϞ āĻĄā§‡āϟāĻž āωāĻ¨ā§āĻŽā§‹āϚāύ āύāϝāĻŧ—āĻŦā§āϝāĻŦāϏāĻžāϝāĻŧāĻŋāĻ• āϞāϜāĻŋāĻ• āύāĻ•āϞ āχāϭ⧇āĻ¨ā§āĻŸā§‡ āϚāĻžāϞāĻžāύ⧋āĨ¤

āĻ…āĻ¨ā§āϝāĻžāĻ¨ā§āϝ āωāĻšā§āϚ-āχāĻŽāĻĒā§āϝāĻžāĻ•ā§āϟ āϏāĻŋāĻ•ā§āϰ⧇āϟāϗ⧁āϞ⧋āϰ āĻŽāĻ§ā§āϝ⧇ āφāϛ⧇ āĻĄāĻžāϟāĻžāĻŦ⧇āϏ URL (āĻ…āϧāĻŋāĻ•āĻžāĻ‚āĻļ āϏāĻŽāϝāĻŧ āĻāĻŽāĻŦ⧇āĻĄ āĻ•āϰāĻž āĻĒāĻžāϏāĻ“āϝāĻŧāĻžāĻ°ā§āĻĄ āϏāĻš), āϏāĻžāĻ°ā§āĻ­āĻŋāϏ āĻ…ā§āϝāĻžāĻ•āĻžāωāĻ¨ā§āϟ āĻ•ā§āϰ⧇āĻĄā§‡āύāĻļāĻŋāϝāĻŧāĻžāϞ, āĻāĻŦāĻ‚ āĻāύāĻ•ā§āϰāĻŋāĻĒāĻļāύ āϕ⧀āĨ¤ āĻāĻ•āϟāĻŋ āϞāĻŋāĻ• āĻšāĻ“āϝāĻŧāĻž āĻĄāĻžāϟāĻžāĻŦ⧇āϏ URL āĻŽāĻžāύ⧇ āĻĒā§‚āĻ°ā§āĻŖ āĻĄā§‡āϟāĻž āϚ⧁āϰāĻŋ āĻšāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ āĻāĻ•āϟāĻŋ āϞāĻŋāĻ• āĻšāĻ“āϝāĻŧāĻž āĻāύāĻ•ā§āϰāĻŋāĻĒāĻļāύ āϕ⧀ āĻ…āϤ⧀āϤ āĻ“ āĻ­āĻŦāĻŋāĻˇā§āϝāϤ⧇āϰ āĻĄā§‡āϟāĻžāϕ⧇ āĻĒāĻĄāĻŧāĻžāϰ āϝ⧋āĻ—ā§āϝ āĻ•āϰ⧇ āϤ⧁āϞāϤ⧇ āĻĒāĻžāϰ⧇, āĻāĻŦāĻ‚ āϰ⧋āĻŸā§‡āĻļāύ āĻ•āĻˇā§āϟāϏāĻžāĻ§ā§āϝ āĻšāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤

āχāĻŽāĻĒā§āϝāĻžāĻ•ā§āϟ āĻŦā§‹āĻāĻžāϰ āĻĻā§āϰ⧁āϤ āωāĻĒāĻžāϝāĻŧ:

  • āϟāĻžāĻ•āĻž āĻ–āϰāϚ āĻ•āϰāϤ⧇ āĻŦāĻž āĻ…ā§āϝāĻžāĻ•āĻļāύ āĻŸā§āϰāĻŋāĻ—āĻžāϰ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇: payment keys, admin API keys, webhook signing secrets
  • āφāĻĒāύāĻŋ āĻšāĻŋāϏ⧇āĻŦ⧇ āĻ›āĻĻā§āĻŽāĻŦ⧇āĻļ āϧāĻžāϰāĻŖ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇: SMTP āĻĒāĻžāϏāĻ“āϝāĻŧāĻžāĻ°ā§āĻĄ, āχāĻŽā§‡āχāϞ āϏ⧇āĻ¨ā§āĻĄāĻŋāĻ‚ āϕ⧀, āĻŽā§‡āϏ⧇āϜāĻŋāĻ‚ āĻŦāϟ āĻŸā§‹āϕ⧇āύ
  • āϏāĻŦ āĻĄā§‡āϟāĻž āωāĻ¨ā§āĻŽā§‹āϚāύ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇: āĻĄāĻžāϟāĻžāĻŦ⧇āϏ āĻ•ā§āϰ⧇āĻĄā§‡āύāĻļāĻŋāϝāĻŧāĻžāϞ, āĻ•ā§āϞāĻžāωāĻĄ āϏāĻžāĻ°ā§āĻ­āĻŋāϏ āĻāĻ•āĻžāωāĻ¨ā§āϟ
  • āĻ—ā§‹āĻĒāύ⧀āϝāĻŧāϤāĻž āĻ¸ā§āĻĨāĻžāϝāĻŧā§€āĻ­āĻžāĻŦ⧇ āϭ⧇āϙ⧇ āĻĻāĻŋāϤ⧇ āĻĒāĻžāϰ⧇: āĻāύāĻ•ā§āϰāĻŋāĻĒāĻļāύ āϕ⧀, āϏāĻžāχāύāĻŋāĻ‚ āϕ⧀
  • āĻĒā§āϰāĻžāϝāĻŧāχ āĻļāĻŋāĻĒ āĻ•āϰāĻž āύāĻŋāϰāĻžāĻĒāĻĻ: āĻŦā§āϰāĻžāωāϜāĻžāϰ⧇āϰ āϜāĻ¨ā§āϝ āĻĒāĻžāĻŦāϞāĻŋāĻļ⧇āĻŦāϞ āϕ⧀ (āĻāĻ–āύāĻ“ āĻĄā§‹āĻŽā§‡āχāύ/āĻ…ā§āϝāĻžāĻĒ āĻĻā§āĻŦāĻžāϰāĻž āϏ⧀āĻŽāĻžāĻŦāĻĻā§āϧ āĻ•āϰ⧁āύ)

āĻ•āĻ–āύāχ āĻ•ā§āϞāĻžāϝāĻŧ⧇āĻ¨ā§āϟ āĻ…ā§āϝāĻžāĻĒ⧇ āĻĒāĻžāĻ āĻžāĻŦ⧇āύ āύāĻž: secret API keys, SMTP āĻ•ā§āϰ⧇āĻĄā§‡āύāĻļāĻŋāϝāĻŧāĻžāϞ, āĻĄāĻžāϟāĻžāĻŦ⧇āϏ āĻĒāĻžāϏāĻ“āϝāĻŧāĻžāĻ°ā§āĻĄ, āϏāĻžāĻ°ā§āĻ­āĻŋāϏ āĻ…ā§āϝāĻžāĻ•āĻžāωāĻ¨ā§āϟ, āĻĒā§āϰāĻžāχāϭ⧇āϟ āĻāύāĻ•ā§āϰāĻŋāĻĒāĻļāύ āϕ⧀, āĻāĻŦāĻ‚ webhook signing secretsāĨ¤ āϝāĻĻāĻŋ āĻ•ā§āϞāĻžāϝāĻŧ⧇āĻ¨ā§āϟāϕ⧇ āĻĨāĻžāĻ°ā§āĻĄ-āĻĒāĻžāĻ°ā§āϟāĻŋ API āĻ•āϞ āĻ•āϰāϤ⧇ āĻšāϝāĻŧ, āĻŦā§āϝāĻžāĻ•āĻāĻ¨ā§āĻĄā§‡āϰ āĻŽāĻ§ā§āϝ āĻĻāĻŋāϝāĻŧ⧇ āϰāĻžāωāϟ āĻ•āϰ⧁āύ āϝāĻžāϤ⧇ āϏāĻŋāĻ•ā§āϰ⧇āϟ āϏāĻžāĻ°ā§āĻ­āĻžāϰ-āϏāĻžāχāĻĄā§‡āχ āĻĨāĻžāϕ⧇āĨ¤

āĻŦāĻŋāĻ˛ā§āĻĄā§‡ āĻ—ā§‹āĻĒāύ āύāĻž āĻĸ⧁āĻ•āĻŋāϝāĻŧ⧇ āϰāĻžāĻ–āĻžāϰ āĻĒā§āϝāĻžāϟāĻžāĻ°ā§āύ

Create a safer admin workflow
Create an authenticated admin panel to manage integrations without exposing sensitive values.
Build Panel

āĻāĻ•āϟāĻŋ āύāĻŋāϰāĻžāĻĒāĻĻ āĻĄāĻŋāĻĢāĻ˛ā§āϟ āϏāĻšāϜ: āϕ⧋āύ āĻ•āĻŋāϛ⧁ āĻ•āĻŽā§āĻĒāĻžāχāϞ, āĻāĻ•ā§āϏāĻĒā§‹āĻ°ā§āϟ āĻŦāĻž āĻļ⧇āϝāĻŧāĻžāϰ āĻ•āϰāĻž āĻšāϞ⧇ āϤāĻžāϤ⧇ āĻ—ā§‹āĻĒāύ āĻŦ⧇āĻ• āĻ•āϰāĻŦ⧇āύ āύāĻžāĨ¤ āĻŦāĻŋāĻ˛ā§āĻĄāϕ⧇ āĻĒāĻžāĻŦāϞāĻŋāĻ• āφāĻ°ā§āϟāĻŋāĻĢā§āϝāĻžāĻ•ā§āϟ āĻ­āĻžāĻŦ⧁āύ, āĻāĻŽāύāĻ•āĻŋ āφāĻĒāύāĻŋ āĻŽāύ⧇ āĻ•āϰ⧇āύ āϏ⧇āϗ⧁āϞ⧋ āĻĒā§āϰāĻžāχāϭ⧇āϟāĨ¤

āĻĒā§āϰāϤāĻŋāϟāĻŋ āĻāύāĻ­āĻžāϝāĻŧāϰāύāĻŽā§‡āĻ¨ā§āĻŸā§‡āϰ āϜāĻ¨ā§āϝ āϏāĻ āĻŋāĻ• āĻ•āύāĻŸā§‡āχāύāĻžāϰ āϚāϝāĻŧāύ āĻ•āϰ⧁āύ

āϞ⧋āĻ•āĻžāϞ āĻĄā§‡āϭ⧇āϞāĻĒāĻŽā§‡āĻ¨ā§āĻŸā§‡āϰ āϜāĻ¨ā§āϝ, āĻāĻ•āϟāĻŋ āĻ•āύāĻĢāĻŋāĻ— āĻĢāĻžāχāϞ āĻ āĻŋāĻ• āφāϛ⧇ āϝāĻĻāĻŋ āĻāϟāĻŋ āĻ­āĻžāĻ°ā§āϏāύ āĻ•āĻ¨ā§āĻŸā§āϰ⧋āϞ⧇ āύāĻž āϝāĻžāϝāĻŧ āĻāĻŦāĻ‚ āϏāĻšāĻœā§‡ āĻĒā§āϰāϤāĻŋāĻ¸ā§āĻĨāĻžāĻĒāύāϝ⧋āĻ—ā§āϝ āĻšāϝāĻŧ (āωāĻĻāĻžāĻšāϰāĻŖ: āϞ⧋āĻ•āĻžāϞ-āĻ…āύāϞāĻŋ .env āĻ¸ā§āϟāĻžāχāϞ āĻĢāĻžāχāϞ)āĨ¤ Staging āĻāĻŦāĻ‚ production-āĻāϰ āϜāĻ¨ā§āϝ, āĻāĻ•āϟāĻŋ āϰāĻŋāϝāĻŧ⧇āϞ āϏāĻŋāĻ•ā§āϰ⧇āϟ āĻ¸ā§āĻŸā§‹āϰ āĻĒ⧇āĻĢāĻžāϰ āĻ•āϰ⧁āύ: āĻ•ā§āϞāĻžāωāĻĄ āĻĒā§āϰ⧋āĻ­āĻžāχāĻĄāĻžāϰ⧇āϰ āϏāĻŋāĻ•ā§āϰ⧇āϟ āĻŽā§āϝāĻžāύ⧇āϜāĻžāϰ, āĻāĻ•āϟāĻŋ āĻĄā§‡āĻĄāĻŋāϕ⧇āĻŸā§‡āĻĄ āĻ­āĻ˛ā§āϟ, āĻŦāĻž āφāĻĒāύāĻžāϰ āĻĒā§āĻ˛ā§āϝāĻžāϟāĻĢāĻ°ā§āĻŽā§‡āϰ āĻĒā§āϰāĻŸā§‡āĻ•ā§āĻŸā§‡āĻĄ āĻāύāĻ­āĻžāϝāĻŧāϰāύāĻŽā§‡āĻ¨ā§āϟ āϏ⧇āϟāĻŋāĻ‚āϏāĨ¤

Environment variables āĻ­āĻžāϞ āĻĄāĻŋāĻĢāĻ˛ā§āϟ āĻ•āĻžāϰāĻŖ āϏ⧇āϗ⧁āϞ⧋ āϰāĻžāύāϟāĻžāχāĻŽā§‡ āχāύāĻœā§‡āĻ•ā§āϟ āĻ•āϰāĻž āϏāĻšāϜ āĻāĻŦāĻ‚ āϕ⧋āĻĄāĻŦ⧇āϏ āĻĨ⧇āϕ⧇ āφāϞāĻžāĻĻāĻž āϰāĻžāĻ–āĻž āϝāĻžāϝāĻŧāĨ¤ āĻŽā§‚āϞ āĻŦāĻŋāώāϝāĻŧ āĻšāϞ⧋ āϟāĻžāχāĻŽāĻŋāĻ‚: āĻŦāĻŋāĻ˛ā§āĻĄ-āϟāĻžāχāĻŽ āχāύāĻœā§‡āĻ•āĻļāύ āύāĻž āĻ•āϰ⧇ āϰāĻžāύāϟāĻžāχāĻŽ āχāύāĻœā§‡āĻ•āĻļāύ āĻ•āϰāĻž āύāĻŋāϰāĻžāĻĒāĻĻ āĻ•āĻžāϰāĻŖ āϏāĻŋāĻ•ā§āϰ⧇āϟ āφāϰ āĻŦāĻŋāĻ˛ā§āĻĄ āφāωāϟāĻĒ⧁āĻŸā§‡āϰ āĻ…āĻ‚āĻļ āĻšāϝāĻŧ āύāĻžāĨ¤

āĻāĻ•āϟāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻŋāĻ• āĻŦāĻŋāĻ­āĻžāϜāύ āϝāĻž āĻ…āύ⧇āĻ• āϟāĻŋāĻŽā§‡āϰ āϜāĻ¨ā§āϝ āĻ•āĻžāϜ āĻ•āϰ⧇:

  • Local dev: āϞ⧋āĻ•āĻžāϞ env vars āĻŦāĻž āϞ⧋āĻ•āĻžāϞ āϏāĻŋāĻ•ā§āϰ⧇āϟ āĻĢāĻžāχāϞ, āĻĒā§āϰāϤāĻŋāϟāĻŋ āĻĄā§‡āϭ⧇āϰ āĻŽā§‡āĻļāĻŋāύ āφāϞāĻžāĻĻāĻž
  • Staging: āϏāĻŋāĻ•ā§āϰ⧇āϟ āĻŽā§āϝāĻžāύ⧇āϜāĻžāϰ āĻŦāĻž āĻĒā§āϰāĻŸā§‡āĻ•ā§āĻŸā§‡āĻĄ āĻāύāĻ­āĻžāϝāĻŧāϰāύāĻŽā§‡āĻ¨ā§āϟ āϏ⧇āϟāĻŋāĻ‚āϏ, āĻļ⧁āϧ⧁āχ āĻ¸ā§āĻŸā§‡āϜāĻŋāς⧇āϰ āϜāĻ¨ā§āϝ āĻ¸ā§āϕ⧋āĻĒāĻĄ
  • Production: āφāϰāĻ“ āĻ•āĻĄāĻŧāĻž āĻ…ā§āϝāĻžāĻ•ā§āϏ⧇āϏ āĻ•āύāĻŸā§āϰ⧋āϞ, āĻ…āĻĄāĻŋāϟ āϞāĻ—, āĻāĻŦāĻ‚ āϰ⧋āĻŸā§‡āĻļāύāϏāĻš āϏāĻŋāĻ•ā§āϰ⧇āϟ āĻŽā§āϝāĻžāύ⧇āϜāĻžāϰ

āύāĻžāĻŽāĻ•āϰāĻŖ āĻ“ āĻŦāĻžāωāĻ¨ā§āĻĄāĻžāϰāĻŋ āĻāĻ•āϰāĻ•āĻŽ āϰāĻžāϖ⧁āύ

āĻĒā§āϰāϤāĻŋāϟāĻŋ āĻāύāĻ­āĻžāϝāĻŧāϰāύāĻŽā§‡āĻ¨ā§āĻŸā§‡ āĻāĻ•āχ āϕ⧀ āύāĻžāĻŽ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧁āύ āϝāĻžāϤ⧇ āĻ…ā§āϝāĻžāĻĒ āφāϚāϰāĻŖ āĻāĻ•āχ āĻĨāĻžāϕ⧇: SMTP_HOST, SMTP_USER, SMTP_PASS, STRIPE_SECRET_KEY, WEBHOOK_SIGNING_SECRETāĨ¤ āĻļ⧁āϧ⧁ āĻ­ā§āϝāĻžāϞ⧁ āĻŦāĻĻāϞāĻžāύāĨ¤

āϝāĻ–āύ āĻāύāĻ­āĻžāϝāĻŧāϰāύāĻŽā§‡āĻ¨ā§āϟ āϗ⧁āϰ⧁āĻ¤ā§āĻŦ āĻĒāĻžāϝāĻŧ (āĻĒ⧇āĻŽā§‡āĻ¨ā§āϟ, āχāĻŽā§‡āχāϞ, āĻ“ā§Ÿā§‡āĻŦāĻšā§āĻ•), āϏāĻŽā§āĻ­āĻŦ āĻšāϞ⧇ āφāϞāĻžāĻĻāĻž āĻĒā§āϰāĻœā§‡āĻ•ā§āϟ āĻŦāĻž āĻ•ā§āϞāĻžāωāĻĄ āĻāĻ•āĻžāωāĻ¨ā§āϟ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧁āύāĨ¤ āωāĻĻāĻžāĻšāϰāĻŖāĻ¸ā§āĻŦāϰ⧂āĻĒ, āĻ¸ā§āĻŸā§‡āϜāĻŋāĻ‚ Stripe āϕ⧀ āĻ“ webhook secret āĻ¸ā§āĻŸā§‡āϜāĻŋāĻ‚-āĻ“āύāϞāĻŋ āĻ¸ā§āĻŸā§‹āϰ⧇ āϰāĻžāϖ⧁āύ āϝāĻžāϤ⧇ āĻ¸ā§āĻŸā§‡āϜāĻŋāĻ‚ āĻŽāĻŋāϏāĻ•āύāĻĢāĻŋāĻ—āĻžāϰ⧇āĻļāύ āĻĒā§āϰ⧋āĻĄāĻžāĻ•āĻļāύāϕ⧇ āĻ¸ā§āĻĒāĻ°ā§āĻļ āύāĻž āĻ•āϰ⧇āĨ¤

āϝāĻĻāĻŋ āφāĻĒāύāĻŋ AppMaster āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āĻĄāĻŋāĻĒā§āϞāϝāĻŧ āĻ•āϰ⧇āύ, āĻŦā§āϝāĻžāĻ•āĻāĻ¨ā§āĻĄ āϏāĻžāĻ°ā§āĻ­āĻŋāϏ⧇āϰ āϜāĻ¨ā§āϝ āϰāĻžāύāϟāĻžāχāĻŽ āĻāύāĻ­āĻžāϝāĻŧāϰāύāĻŽā§‡āĻ¨ā§āϟ āϏ⧇āϟāĻŋāĻ‚āϏ āĻĒāĻ›āĻ¨ā§āĻĻ āĻ•āϰ⧁āύ āϝāĻžāϤ⧇ āϏāĻŋāĻ•ā§āϰ⧇āϟ āϏāĻžāĻ°ā§āĻ­āĻžāϰ-āϏāĻžāχāĻĄā§‡āχ āĻĨāĻžāϕ⧇ āĻāĻŦāĻ‚ āĻāĻ•ā§āϏāĻĒā§‹āĻ°ā§āĻŸā§‡āĻĄ āϕ⧋āĻĄ āĻŦāĻž āĻ•ā§āϞāĻžāϝāĻŧ⧇āĻ¨ā§āϟ āĻ…ā§āϝāĻžāĻĒ⧇ āĻāĻŽāĻŦ⧇āĻĄ āύāĻž āĻšāϝāĻŧāĨ¤

āĻĄā§‡āĻ­, āĻ¸ā§āĻŸā§‡āϜāĻŋāĻ‚, āĻĒā§āϰ⧋āĻĄ-āĻ āϧāĻžāĻĒ⧇ āϧāĻžāĻĒ⧇ āϏ⧇āϟāφāĻĒ

Handle email the server way
Send emails from backend endpoints so SMTP credentials never reach browsers or devices.
Create Backend

āĻ…āĻĒāĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āĻ āĻŋāύ āĻ•āϰ⧇ āĻĻāĻŋāύāĨ¤

  1. āφāĻĒāύāĻžāϰ āϕ⧀ āφāϛ⧇ āĻāĻŦāĻ‚ āϕ⧋āĻĨāĻžāϝāĻŧ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻšāĻšā§āϛ⧇ āϤāĻž āχāύāϭ⧇āĻ¨ā§āϟāϰāĻŋ āĻ•āϰ⧁āύāĨ¤ API āϕ⧀, SMTP āχāωāϜāĻžāϰāύ⧇āĻŽ āĻ“ āĻĒāĻžāϏāĻ“āϝāĻŧāĻžāĻ°ā§āĻĄ, webhook signing secret, āĻĄāĻžāϟāĻžāĻŦ⧇āϏ āĻĒāĻžāϏāĻ“āϝāĻŧāĻžāĻ°ā§āĻĄ, JWT āϏāĻžāχāύāĻŋāĻ‚ āϕ⧀, āĻāĻŦāĻ‚ āĻĨāĻžāĻ°ā§āĻĄ-āĻĒāĻžāĻ°ā§āϟāĻŋ āĻŸā§‹āϕ⧇āύ āĻ…āĻ¨ā§āϤāĻ°ā§āϭ⧁āĻ•ā§āϤ āĻ•āϰ⧁āύāĨ¤ āĻĒā§āϰāϤāĻŋāϟāĻŋāϰ āϜāĻ¨ā§āϝ āĻŽāĻžāϞāĻŋāĻ• (āϟāĻŋāĻŽ āĻŦāĻž āϭ⧇āĻ¨ā§āĻĄāϰ), āϝ⧇ āĻ•āĻŽā§āĻĒā§‹āύ⧇āĻ¨ā§āϟ āĻĒāĻĄāĻŧ⧇ (āĻŦā§āϝāĻžāĻ•āĻāĻ¨ā§āĻĄ, āĻ“āϝāĻŧāĻžāĻ°ā§āĻ•āĻžāϰ, āĻŽā§‹āĻŦāĻžāχāϞ, āĻ“āϝāĻŧ⧇āĻŦ), āĻāĻŦāĻ‚ āϰ⧋āĻŸā§‡āĻļāύ āĻ•āϤ āϘāύāχ āĻšāϤ⧇ āĻĒāĻžāϰ⧇ āϤāĻž āύ⧋āϟ āĻ•āϰ⧁āύāĨ¤

  2. Dev, staging, āĻāĻŦāĻ‚ prod-āĻāϰ āϜāĻ¨ā§āϝ āφāϞāĻžāĻĻāĻž āĻ­ā§āϝāĻžāϞ⧁ āĻāĻŦāĻ‚ āφāϞāĻžāĻĻāĻž āĻĒāĻžāϰāĻŽāĻŋāĻļāύ āϤ⧈āϰāĻŋ āĻ•āϰ⧁āύāĨ¤ Dev āϏāĻŋāĻ•ā§āϰ⧇āϟāϗ⧁āϞ⧋ āĻ˛ā§āϝāĻžāĻĒāϟāĻĒ āĻāĻŦāĻ‚ āϞ⧋āĻ•āĻžāϞ āĻ•āĻ¨ā§āĻŸā§‡āχāύāĻžāϰ āĻĨ⧇āϕ⧇ āύāĻŋāϰāĻžāĻĒāĻĻ⧇ āĻŦā§āϝāĻŦāĻšāĻžāϰāϝ⧋āĻ—ā§āϝ āĻšāĻ“āϝāĻŧāĻž āωāϚāĻŋāϤāĨ¤ Staging āĻĒā§āϰ⧋āĻĄā§‡āϰ āĻŽāϤ⧋ āĻĻ⧇āĻ–āϤ⧇ āĻšāĻŦ⧇, āĻ•āĻŋāĻ¨ā§āϤ⧁ āĻ•āĻ–āύ⧋ āĻĒā§āϰ⧋āĻĄ āĻ•ā§āϰ⧇āĻĄā§‡āύāĻļāĻŋāϝāĻŧāĻžāϞ āĻļ⧇āϝāĻŧāĻžāϰ āĻ•āϰāĻž āϝāĻžāĻŦ⧇ āύāĻžāĨ¤ Prod āϕ⧇āĻŦāϞ āĻĒā§āϰ⧋āĻĄāĻžāĻ•āĻļāύ āϰāĻžāύāϟāĻžāχāĻŽ āφāχāĻĄā§‡āĻ¨ā§āϟāĻŋāϟāĻŋ āĻĒāĻĄāĻŧāϤ⧇ āĻĒāĻžāϰāĻŦ⧇, āĻŽāĻžāύ⧁āώ āĻĄāĻŋāĻĢāĻ˛ā§āϟāĻ­āĻžāĻŦ⧇ āύāϝāĻŧāĨ¤

  3. āϏāĻŋāĻ•ā§āϰ⧇āϟāϗ⧁āϞ⧋ āĻŦāĻŋāĻ˛ā§āĻĄ āϟāĻžāχāĻŽ āύāϝāĻŧ, āϰāĻžāύāϟāĻžāχāĻŽ āĻ•āύāĻĢāĻŋāϗ⧇ āϏāϰāĻžāύāĨ¤ āϝāĻĻāĻŋ āϕ⧋āύ⧋ āϏāĻŋāĻ•ā§āϰ⧇āϟ āĻŦāĻŋāĻ˛ā§āĻĄā§‡āϰ āϏāĻŽāϝāĻŧ āωāĻĒāĻ¸ā§āĻĨāĻŋāϤ āĻĨāĻžāϕ⧇, āϤāĻž āĻŦāĻŋāĻ˛ā§āĻĄ āϞāĻ—, Docker āϞ⧇āϝāĻŧāĻžāϰ, āĻ•ā§āϞāĻžāϝāĻŧ⧇āĻ¨ā§āϟ āĻŦāĻžāĻ¨ā§āĻĄāϞ, āĻŦāĻž āĻ•ā§āĻ°ā§āϝāĻžāĻļ āϰāĻŋāĻĒā§‹āĻ°ā§āĻŸā§‡ āĻĒāĻĄāĻŧ⧇ āϝ⧇āϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ āϏāĻšāϜ āύāĻŋāϝāĻŧāĻŽ: āĻŦāĻŋāĻ˛ā§āĻĄ āĻāĻŽāύ āφāĻ°ā§āϟāĻŋāĻĢā§āϝāĻžāĻ•ā§āϟ āϤ⧈āϰāĻŋ āĻ•āϰ⧇ āϝāĻž āĻ•āĻĒāĻŋ āĻ•āϰāĻž āύāĻŋāϰāĻžāĻĒāĻĻ; āϏāĻŋāĻ•ā§āϰ⧇āϟ āϕ⧇āĻŦāϞ āĻ…ā§āϝāĻžāĻĒ āφāϰāĻŽā§āϭ⧇āϰ āϏāĻŽāϝāĻŧ āχāύāĻœā§‡āĻ•ā§āϟ āĻ•āϰāĻž āĻšāϝāĻŧāĨ¤

  4. āĻāĻ•āϟāĻŋ āϧāĻžāϰāĻžāĻŦāĻžāĻšāĻŋāĻ• āĻĄāĻŋāĻĒā§āϞāϝāĻŧāĻŽā§‡āĻ¨ā§āϟ āĻĢā§āϞ⧋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧁āύāĨ¤ āĻāĻ•āϟāĻŋ āĻĒāĻĻā§āϧāϤāĻŋ āϝāĻž āϟāĻŋāĻŽāϕ⧇ āϏāĻŽāĻ¸ā§āϝāĻžāϝāĻŧ āĻĢ⧇āϞāĻžāϰ āϏāĻŽā§āĻ­āĻžāĻŦāύāĻž āĻ•āĻŽ āϰāĻžāϖ⧇:

  • āĻĒā§āϰāϤāĻŋāϟāĻŋ āĻāύāĻ­āĻžāϝāĻŧāϰāύāĻŽā§‡āĻ¨ā§āĻŸā§‡āϰ āϜāĻ¨ā§āϝ āĻāĻ•āϟāĻŋ āϏāĻŋāĻ•ā§āϰ⧇āϟ āĻ¸ā§āĻŸā§‹āϰ āϤ⧈āϰāĻŋ āĻ•āϰ⧁āύ (āĻŦāĻž āĻ•āĻĄāĻŧāĻž namespace)āĨ¤
  • āĻ…ā§āϝāĻžāĻĒ⧇āϰ runtime identity-āϕ⧇ āϕ⧇āĻŦāϞ āύāĻŋāϜ āĻĒāϰāĻŋāĻŦ⧇āĻļ⧇āϰ āϏāĻŋāĻ•ā§āϰ⧇āϟ āĻĒāĻĄāĻŧāĻžāϰ āĻ…āύ⧁āĻŽāϤāĻŋ āĻĻāĻŋāύāĨ¤
  • āĻ¸ā§āϟāĻžāĻ°ā§āϟāφāĻĒ⧇ āĻāύāĻ­āĻžāϝāĻŧāϰāύāĻŽā§‡āĻ¨ā§āϟ āĻ­ā§āϝāĻžāϰāĻŋāϝāĻŧ⧇āĻŦāϞ āĻŦāĻž āĻŽāĻžāωāĻ¨ā§āϟ āĻ•āϰāĻž āĻĢāĻžāχāϞ⧇āϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āϏāĻŋāĻ•ā§āϰ⧇āϟ āχāύāĻœā§‡āĻ•ā§āϟ āĻ•āϰ⧁āύ, āĻāĻŦāĻ‚ āϏ⧇āϗ⧁āϞ⧋ āχāĻŽā§‡āϜ āĻŦāĻž āĻĢā§āϰāĻ¨ā§āϟ-āĻāĻ¨ā§āĻĄ āĻŦāĻžāĻ¨ā§āĻĄāϞ⧇ āϰāĻžāĻ–āĻŦ⧇āύ āύāĻžāĨ¤
  • āĻĒā§āϰāϤāĻŋāϟāĻŋ āϏāĻŋāĻ•ā§āϰ⧇āĻŸā§‡āϰ āϜāĻ¨ā§āϝ āϰ⧋āĻŸā§‡āĻļāύ āύāĻŋāϝāĻŧāĻŽ (āĻŽā§‡āϝāĻŧāĻžāĻĻ, āĻŽāĻžāϞāĻŋāĻ•, āĻāĻŦāĻ‚ āϰāĻŋāĻŽāĻžāχāĻ¨ā§āĻĄāĻžāϰ āĻ•ā§āϝāĻžāĻĄā§‡āĻ¨ā§āϏ) āϝ⧋āĻ— āĻ•āϰ⧁āύāĨ¤
  • āĻāĻ•āϟāĻŋ āĻļāĻ•ā§āϤ āĻŸā§‡āĻ¸ā§āϟ āϝ⧋āĻ— āĻ•āϰ⧁āύ: āϝāĻĻāĻŋ āĻ¸ā§āĻŸā§‡āϜāĻŋāĻ‚ āĻ•āĻ–āύāĻ“ āĻĒā§āϰ⧋āĻĄ āϏāĻŋāĻ•ā§āϰ⧇āϟ āĻĒāĻĄāĻŧāĻžāϰ āĻšā§‡āĻˇā§āϟāĻž āĻ•āϰ⧇, āĻĄāĻŋāĻĒā§āϞāϝāĻŧ āĻŦā§āϝāĻ°ā§āĻĨ āĻšāĻŦ⧇āĨ¤

āϞāĻ•āĻĄāĻžāωāύ āĻŽāĻžāύ⧇ āĻĒā§āϰāϧāĻžāύāϤ āϕ⧇ āĻāĻŦāĻ‚ āϕ⧀ āĻĒāĻĄāĻŧāϤ⧇ āĻĒāĻžāϰ⧇ āϤāĻž āĻ•āĻŽāĻžāύ⧋āĨ¤ āĻļ⧇āϝāĻŧāĻžāĻ°ā§āĻĄ āĻāĻ•āĻžāωāĻ¨ā§āϟ āĻāĻĄāĻŧāĻžāύ, āĻĻā§€āĻ°ā§āϘāĻœā§€āĻŦā§€ āĻŸā§‹āϕ⧇āύ āϝāϤāϟāĻž āϏāĻŽā§āĻ­āĻŦ āĻĒāϰāĻŋāĻšāĻžāϰ āĻ•āϰ⧁āύ, āĻāĻŦāĻ‚ āϰāĻŋāĻĄ āĻĒāĻžāϰāĻŽāĻŋāĻļāύ āϞ⧇āĻ–āĻžāϰ āϤ⧁āϞāύāĻžāϝāĻŧ āϏāĻ™ā§āϕ⧁āϚāĻŋāϤ āϰāĻžāϖ⧁āύāĨ¤

AppMaster-āĻāϰ āĻŽāϤ⧋ no-code āĻĒā§āĻ˛ā§āϝāĻžāϟāĻĢāĻ°ā§āĻŽ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϞ⧇ āĻāĻ•āχ āĻĒāĻĻā§āϧāϤāĻŋ āĻ•āĻžāϜ āĻ•āϰ⧇: āĻĨāĻžāĻ°ā§āĻĄ-āĻĒāĻžāĻ°ā§āϟāĻŋ āĻ•ā§āϰ⧇āĻĄā§‡āύāĻļāĻŋāϝāĻŧāĻžāϞ āĻāύāĻ­āĻžāϝāĻŧāϰāύāĻŽā§‡āĻ¨ā§āϟ-āĻ¸ā§āĻĒ⧇āϏāĻŋāĻĢāĻŋāĻ• āϰāĻžāύāϟāĻžāχāĻŽ āϏ⧇āϟāĻŋāĻ‚āϏ⧇ āϰāĻžāϖ⧁āύ, āĻāĻŦāĻ‚ āĻœā§‡āύāĻžāϰ⧇āϟ āĻ•āϰāĻž āĻŦāĻŋāĻ˛ā§āĻĄ āφāĻ°ā§āϟāĻŋāĻĢā§āϝāĻžāĻ•ā§āϟāϗ⧁āϞ⧋āϕ⧇ āϟāĻŋāĻŽā§‡āϰ āĻ­āĻŋāϤāϰ⧇āχ āĻĒāĻžāĻŦāϞāĻŋāĻ• āĻšāĻŋāϏ⧇āĻŦ⧇ āĻŦāĻŋāĻŦ⧇āϚāύāĻž āĻ•āϰ⧁āύāĨ¤ āĻāχ āĻāĻ• āϏāĻŋāĻĻā§āϧāĻžāĻ¨ā§āϤ āĻ…āύ⧇āĻ• āĻĻ⧁āĻ°ā§āϘāϟāύāĻžāϜāύāĻŋāϤ āϞāĻŋāĻ• āĻĒā§āϰāϤāĻŋāϰ⧋āϧ āĻ•āϰ⧇āĨ¤

API āϕ⧀ āĻ“ SMTP āĻ•ā§āϰ⧇āĻĄā§‡āύāĻļāĻŋāϝāĻŧāĻžāϞ⧇āϰ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻŋāĻ• āĻĒā§āϝāĻžāϟāĻžāĻ°ā§āύ

āĻ…āύ⧇āĻ• āϞāĻŋāĻ• āϘāĻŸā§‡ āϝāĻ–āύ āĻ…ā§āϝāĻžāĻĒāϕ⧇ “āĻ•āĻŋāϛ⧁ āĻĒāĻžāĻ āĻžāĻ¤ā§‡â€ āĻšāϝāĻŧ āĻāĻŦāĻ‚ āĻĻā§āϰ⧁āϤ āϏāĻŽāĻžāϧāĻžāύ āĻšāĻŋāϏ⧇āĻŦ⧇ āĻ•ā§āϰ⧇āĻĄā§‡āύāĻļāĻŋāϝāĻŧāĻžāϞāϕ⧇ āĻ•ā§āϞāĻžāϝāĻŧ⧇āĻ¨ā§āĻŸā§‡ āĻĒ⧇āĻ¸ā§āϟ āĻ•āϰāĻž āĻŦāĻž āĻ•āύāĻĢāĻŋāĻ— āĻĢāĻžāχāϞ⧇ āϰ⧇āϖ⧇ āĻĻ⧇āĻ“āϝāĻŧāĻž āĻšāϝāĻŧ āϝāĻž āĻŦāĻžāĻ¨ā§āĻĄāϞ⧇ āĻĒāĻĄāĻŧ⧇ āϝāĻžāϝāĻŧāĨ¤ āĻāĻ•āϟāĻŋ āĻ­āĻžāϞ āĻĄāĻŋāĻĢāĻ˛ā§āϟ āϰ⧁āϞ: āĻ“āϝāĻŧ⧇āĻŦ āĻ“ āĻŽā§‹āĻŦāĻžāχāϞ āĻ•ā§āϞāĻžāϝāĻŧ⧇āĻ¨ā§āϟ āĻ•āĻ–āύ⧋ SMTP āχāωāϜāĻžāϰāύ⧇āĻŽ, SMTP āĻĒāĻžāϏāĻ“āϝāĻŧāĻžāĻ°ā§āĻĄ āĻŦāĻž āĻāĻŽāύ āϕ⧋āύ⧋ āĻĒā§āϰ⧋āĻ­āĻžāχāĻĄāĻžāϰ āϕ⧀ āϰāĻžāĻ–āĻŦ⧇ āύāĻž āϝāĻž āĻŽā§‡āϏ⧇āϜ āĻĒāĻžāĻ āĻžāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤

āχāĻŽā§‡āχāϞ⧇āϰ āϜāĻ¨ā§āϝ, āϏāĻŽā§āĻ­āĻŦ āĻšāϞ⧇ āĻ•āĻžāρāϚāĻž SMTP-āĻāϰ āĻŦāĻĻāϞ⧇ āχāĻŽā§‡āχāϞ āĻĒā§āϰ⧋āĻ­āĻžāχāĻĄāĻžāϰ⧇āϰ API āϕ⧀ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧁āύāĨ¤ API-āĻ­āĻŋāĻ¤ā§āϤāĻŋāĻ• āϏ⧇āĻ¨ā§āĻĄāĻŋāĻ‚ āĻ¸ā§āϕ⧋āĻĒāĻĄ āĻ•āϰāĻž āϏāĻšāϜ (āĻļ⧁āϧ⧁ āĻŽā§‡āχāϞ āĻĒāĻžāĻ āĻžāϤ⧇ āĻĒāĻžāϰ⧇), āϰ⧋āĻŸā§‡āϟ āĻ“ āĻŽāύāĻŋāϟāϰ āĻ•āϰāĻž āϏāĻšāϜāĨ¤ āϝāĻĻāĻŋ SMTP āĻŦā§āϝāĻŦāĻšāĻžāϰāχ āĻ•āϰāϤ⧇ āĻšāϝāĻŧ, āϏāĻžāĻ°ā§āĻ­āĻžāϰ-āϏāĻžāχāĻĄā§‡āχ āϰāĻžāϖ⧁āύ āĻāĻŦāĻ‚ āĻŦā§āϝāĻžāĻ•āĻāĻ¨ā§āĻĄāϕ⧇ āĻāĻ•āĻ• āχāĻ¨ā§āϟāĻžāϰāĻĢ⧇āϏ āĻŦāĻžāύāĻžāύ āϝ⧇āϟāĻžāχ āĻŽā§‡āϞ āϏāĻžāĻ°ā§āĻ­āĻžāϰ⧇āϰ āϏāĻžāĻĨ⧇ āĻ•āĻĨāĻž āĻŦāϞ⧇āĨ¤

āϏ⧁āϰāĻ•ā§āώāĻŋāϤ āϏ⧇āϟāφāĻĒ āωāĻĻāĻžāĻšāϰāĻŖ:

  • āχāĻŽā§‡āχāϞ āϏ⧇āĻ¨ā§āĻĄāĻŋāĻ‚āϕ⧇ āĻŦā§āϝāĻžāĻ•āĻāĻ¨ā§āĻĄ āĻāĻ¨ā§āĻĄāĻĒāϝāĻŧ⧇āĻ¨ā§āĻŸā§‡āϰ āĻĒāĻŋāĻ›āύ⧇ āϰāĻžāϖ⧁āύ (āωāĻĻāĻžāĻšāϰāĻŖ: “send password reset” āĻŦāĻž “send invoice”)āĨ¤
  • API āϕ⧀ āĻŦāĻž SMTP āĻĒāĻžāϏāĻ“āϝāĻŧāĻžāĻ°ā§āĻĄ āĻŦā§āϝāĻžāĻ•āĻāĻ¨ā§āĻĄā§‡āϰ āĻāύāĻ­āĻžāϝāĻŧāϰāύāĻŽā§‡āĻ¨ā§āϟ āϏāĻŋāĻ•ā§āϰ⧇āĻŸā§‡ āĻ¸ā§āĻŸā§‹āϰ āĻ•āϰ⧁āύ, āϏ⧋āĻ°ā§āϏ āϕ⧋āĻĄ āĻŦāĻž UI āϏ⧇āϟāĻŋāĻ‚āϏ⧇ āύāϝāĻŧāĨ¤
  • Dev, staging, āĻāĻŦāĻ‚ prod-āĻāϰ āϜāĻ¨ā§āϝ āφāϞāĻžāĻĻāĻž āĻ•ā§āϰ⧇āĻĄā§‡āύāĻļāĻŋāϝāĻŧāĻžāϞ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧁āύ (āφāχāĻĄāĻŋāϝāĻŧāĻžāϞāĻŋ āφāϞāĻžāĻĻāĻž āĻ…ā§āϝāĻžāĻ•āĻžāωāĻ¨ā§āϟ āĻ“ āϏ⧇āĻ¨ā§āĻĄāĻžāϰ āĻĄā§‹āĻŽā§‡āχāύ)āĨ¤
  • āĻ¸ā§āĻŸā§‡āϜāĻŋāĻ‚ āϰāĻŋāϏāĻŋāĻĒāĻŋāϝāĻŧ⧇āĻ¨ā§āϟ allowlist āϰāĻžāϖ⧁āύ āϝāĻžāϤ⧇ āϕ⧇āĻŦāϞ āĻ…āύ⧁āĻŽā§‹āĻĻāĻŋāϤ āĻ āĻŋāĻ•āĻžāύāĻžāϗ⧁āϞāĻŋāϤ⧇āχ āĻŽā§‡āχāϞ āϝāĻžāĻŦ⧇āĨ¤
  • āĻĄā§‡āϞāĻŋāĻ­āĻžāϰāĻŋ āĻĢāϞāĻžāĻĢāϞ āϞāĻ— āĻ•āϰ⧁āύ (message ID, provider response, recipient domain) āĻ•āĻŋāĻ¨ā§āϤ⧁ āĻ•ā§āϰ⧇āĻĄā§‡āύāĻļāĻŋāϝāĻŧāĻžāϞ āĻŦāĻž āϏāĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āĻŽā§‡āϏ⧇āϜ āĻŦāĻĄāĻŋ āĻ•āĻ–āύ⧋ āϞāĻ— āĻ•āϰāĻŦ⧇āύ āύāĻžāĨ¤

āĻ¸ā§āĻŸā§‡āϜāĻŋāĻ‚ āĻ“ āĻĒā§āϰ⧋āĻĄ āφāϞāĻžāĻĻāĻž āύāĻž āϰāĻžāĻ–āĻžāϟāĻž āĻŦ⧇āĻļāĻŋ āĻā§āρāĻ•āĻŋāĻĒā§‚āĻ°ā§āĻŖâ€”āĻ¸ā§āĻŸā§‡āϜāĻŋāĻ‚ āϏāĻžāĻ°ā§āĻ­āĻžāϰ āϭ⧁āϞ āĻ•āϰāϞ⧇āχ āĻŦāĻžāĻ¸ā§āϤāĻŦ āĻ—ā§āϰāĻžāĻšāĻ•āĻĻ⧇āϰ āĻ•āĻžāϛ⧇ āĻ¸ā§āĻĒā§āϝāĻžāĻŽ āĻĒ⧌āρāĻ›āĻžāϤ⧇ āĻĒāĻžāϰ⧇ āϝāĻĻāĻŋ āĻāĻ•āχ āϏ⧇āĻ¨ā§āĻĄāĻžāϰ āĻ“ āϰ⧁āϞ āĻļ⧇āϝāĻŧāĻžāϰ āĻ•āϰāĻž āĻšāϝāĻŧāĨ¤ āĻāĻ•āϟāĻŋ āϏāĻšāϜ āĻ—āĻžāĻ°ā§āĻĄ: āĻ¸ā§āĻŸā§‡āϜāĻŋāĻ‚-āĻ āφāωāϟāĻŦāĻžāωāĻ¨ā§āĻĄ āχāĻŽā§‡āχāϞ āĻŦā§āϞāĻ• āĻ•āϰ⧁āύ āϝāĻĻāĻŋ āϰāĻŋāϏāĻŋāĻĒāĻŋāϝāĻŧ⧇āĻ¨ā§āϟ allowlist-āĻ āύāĻž āĻĨāĻžāϕ⧇ (āϝ⧇āĻŽāύ āφāĻĒāύāĻžāϰ āϟāĻŋāĻŽā§‡āϰ āĻ āĻŋāĻ•āĻžāύāĻžāϗ⧁āϞ⧋)āĨ¤

āωāĻĻāĻžāĻšāϰāĻŖ: āφāĻĒāύāĻŋ AppMaster-āĻ āĻāĻ•āϟāĻŋ āĻ•āĻžāĻ¸ā§āϟāĻŽāĻžāϰ āĻĒā§‹āĻ°ā§āϟāĻžāϞ āĻŦāĻžāύāĻžāĻšā§āϛ⧇āύāĨ¤ āĻŽā§‹āĻŦāĻžāχāϞ āĻ…ā§āϝāĻžāĻĒ "login code āĻĒāĻžāĻ āĻžāĻ“" āĻŸā§āϰāĻŋāĻ—āĻžāϰ āĻ•āϰ⧇āĨ¤ āĻ…ā§āϝāĻžāĻĒ āĻŦā§āϝāĻžāĻ•āĻāĻ¨ā§āĻĄ āĻ•āϞ āĻ•āϰ⧇, āĻŦā§āϝāĻžāĻ•āĻāĻ¨ā§āĻĄ āĻĒā§āϰ⧋āĻĄ āĻŦāĻž āĻ¸ā§āĻŸā§‡āϜāĻŋāĻ‚ āĻŽā§‡āχāϞ āϏāĻŋāĻ•ā§āϰ⧇āϟ āĻĒāĻĄāĻŧ⧇ āĻāĻŦāĻ‚ āĻŽā§‡āχāϞ āĻĒāĻžāĻ āĻžāϝāĻŧāĨ¤ āĻŸā§‡āĻ¸ā§āϟāĻžāϰ āĻ¸ā§āĻŸā§‡āϜāĻŋāĻ‚ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϞ⧇ allowlist āĻŦāĻžāĻ¸ā§āϤāĻŦ āĻ—ā§āϰāĻžāĻšāĻ•āĻĻ⧇āϰ āĻ•āĻžāϛ⧇ āĻŽā§‡āϏ⧇āϜ āĻĨāĻžāĻŽāĻžāϝāĻŧ, āĻāĻŦāĻ‚ āϞāĻ—āϗ⧁āϞ⧋ āĻĻ⧇āĻ–āĻžāϝāĻŧ āϝ⧇ āĻĒāĻžāĻ  āϏāĻĢāϞ āĻšāϝāĻŧ⧇āϛ⧇ āĻ•āĻŋāύāĻž āĻ•āĻŋāĻ¨ā§āϤ⧁ āϕ⧀ āĻāĻ•ā§āϏāĻĒā§‹āϜ āĻ•āϰāϛ⧇ āύāĻžāĨ¤

Webhook āϏāĻŋāĻ•ā§āϰ⧇āϟ: āϏāĻžāχāύāĻŋāĻ‚, āϭ⧇āϰāĻŋāĻĢāĻŋāϕ⧇āĻļāύ, āĻ“ āϰ⧋āĻŸā§‡āĻļāύ

Keep secrets out of builds
Build your backend in AppMaster and inject secrets at runtime per environment.
Try AppMaster

Webhook āϏāĻŋāĻ•āĻŋāωāϰāĻŋāϟāĻŋ āĻāĻ•āϟāĻŋ āύāĻŋāϝāĻŧāĻŽā§‡ āϝāĻžāĻšā§āϛ⧇: āĻĒā§āϰāϤāĻŋāϟāĻŋ āϰāĻŋāϕ⧋āϝāĻŧ⧇āĻ¸ā§āϟ āϏāĻžāĻ°ā§āĻ­āĻžāϰ-āϏāĻžāχāĻĄā§‡ āϭ⧇āϰāĻŋāĻĢāĻžāχ āĻ•āϰ⧁āύ āĻāĻŽāύ āĻāĻ•āϟāĻŋ āϏāĻŋāĻ•ā§āϰ⧇āϟ āĻĻāĻŋāϝāĻŧ⧇ āϝāĻž āĻŦāĻžāχāϰ⧇ āϝāĻžāϝāĻŧ āύāĻžāĨ¤ āϝāĻĻāĻŋ āϏāĻŋāĻ•ā§āϰ⧇āϟ āĻ“āϝāĻŧ⧇āĻŦ āĻŦāĻž āĻŽā§‹āĻŦāĻžāχāϞ āĻ…ā§āϝāĻžāĻĒ⧇ āϚāϞ⧇ āϝāĻžāϝāĻŧ, āϤāĻž āφāϰ āϏāĻŋāĻ•ā§āϰ⧇āϟ āĻĨāĻžāϕ⧇ āύāĻžāĨ¤

āϏāĻžāχāύāĻŋāĻ‚ āĻ“ āϭ⧇āϰāĻŋāĻĢāĻŋāϕ⧇āĻļāύ

āĻāĻ•āϟāĻž webhookāϕ⧇ āχāύāĻ•āĻžāĻŽāĻŋāĻ‚ āĻ•āĻžāĻ°ā§āĻĄ āĻĒ⧇āĻŽā§‡āĻ¨ā§āĻŸā§‡āϰ āĻŽāϤ⧋ āϚāĻŋāĻ¨ā§āϤāĻž āĻ•āϰ⧁āύ: āϭ⧇āϰāĻŋāĻĢāĻžāχ āύāĻž āĻšāĻ“āϝāĻŧāĻž āĻĒāĻ°ā§āϝāĻ¨ā§āϤ āĻ•āĻŋāϛ⧁ āĻ—ā§āϰāĻšāĻŖ āĻ•āϰāĻŦ⧇āύ āύāĻžāĨ¤ āĻĒā§āϰ⧋āĻ­āĻžāχāĻĄāĻžāϰ āĻāĻ•āϟāĻŋ āϏāĻŋāĻ—āύ⧇āϚāĻžāϰ āĻšā§‡āĻĄāĻžāϰ āĻĒāĻžāĻ āĻžāϝāĻŧ āϝāĻž āĻĒ⧇āϞ⧋āĻĄ āĻ“ āφāĻĒāύāĻžāϰ āĻļ⧇āϝāĻŧāĻžāĻ°ā§āĻĄ āϏāĻŋāĻ•ā§āϰ⧇āϟ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āĻšāĻŋāϏāĻžāĻŦ āĻ•āϰāĻžāĨ¤ āφāĻĒāύāĻžāϰ āϏāĻžāĻ°ā§āĻ­āĻžāϰ āĻĒā§āϰāĻ¤ā§āϝāĻžāĻļāĻŋāϤ āϏāĻŋāĻ—āύ⧇āϚāĻžāϰ āĻĒ⧁āύāϰāĻžāϝāĻŧ āĻšāĻŋāϏāĻžāĻŦ āĻ•āϰ⧇ āĻāĻŦāĻ‚ āϤ⧁āϞāύāĻž āĻ•āϰ⧇āĨ¤

āϏāĻšāϜ āϭ⧇āϰāĻŋāĻĢāĻŋāϕ⧇āĻļāύ āĻĢā§āϞ⧋:

  • āϰāĻŋāϕ⧋āϝāĻŧ⧇āĻ¸ā§āϟ āĻŦāĻĄāĻŋ āĻ…āύ⧁āϞāĻŋāĻĒāĻŋ āύ⧇āĻŦ⧇āύ āύāĻžâ€”āĻ•āĻžāρāϚāĻž āĻŦāĻĄāĻŋ āĻ āĻŋāĻ• āϝ⧇āĻ­āĻžāĻŦ⧇ āĻāϏ⧇āϛ⧇ āϤ⧇āĻŽāύ āĻĒāĻĄāĻŧ⧁āύāĨ¤
  • āφāĻĒāύāĻžāϰ webhook āϏāĻŋāĻ•ā§āϰ⧇āϟ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āĻĒā§āϰāĻ¤ā§āϝāĻžāĻļāĻŋāϤ āϏāĻŋāĻ—āύ⧇āϚāĻžāϰ āĻ—āĻŖāύāĻž āĻ•āϰ⧁āύāĨ¤
  • āĻ•āύāĻ¸ā§āĻŸā§āϝāĻžāĻ¨ā§āϟ-āϟāĻžāχāĻŽ āϤ⧁āϞāύāĻž āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧁āύāĨ¤
  • āĻ…āύ⧁āĻĒāĻ¸ā§āĻĨāĻŋāϤ āĻŦāĻž āĻ…āĻŦ⧈āϧ āϏāĻŋāĻ—āύ⧇āϚāĻžāϰāϕ⧇ āĻ¸ā§āĻĒāĻˇā§āϟ 401 āĻŦāĻž 403 āĻĻāĻŋāϝāĻŧ⧇ āĻĒā§āϰāĻ¤ā§āϝāĻžāĻ–ā§āϝāĻžāύ āĻ•āϰ⧁āύāĨ¤
  • āϤāĻžāϰāĻĒāϰāχ JSON āĻĒāĻžāĻ°ā§āϏ āĻ•āϰ⧇ āχāϭ⧇āĻ¨ā§āϟ āĻĒā§āϰāϏ⧇āϏ āĻ•āϰ⧁āύāĨ¤

Dev, staging, āĻāĻŦāĻ‚ prod-āĻ āφāϞāĻžāĻĻāĻž webhook āĻāĻ¨ā§āĻĄāĻĒāϝāĻŧ⧇āĻ¨ā§āϟ āĻāĻŦāĻ‚ āφāϞāĻžāĻĻāĻž āϏāĻŋāĻ•ā§āϰ⧇āϟ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧁āύāĨ¤ āĻāϤ⧇ āĻāĻ•āϟāĻŋ dev āϟ⧁āϞ āĻŦāĻž āĻŸā§‡āĻ¸ā§āϟ āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽ āĻĒā§āϰ⧋āĻĄ āĻ…ā§āϝāĻžāĻ•āĻļāύ āĻŸā§āϰāĻŋāĻ—āĻžāϰ āĻ•āϰāϤ⧇ āĻĒāĻžāϰāĻŦ⧇ āύāĻž, āĻāĻŦāĻ‚ āχāύāϏāĻŋāĻĄā§‡āĻ¨ā§āϟ āĻ•āύāĻŸā§‡āχāύ āĻ•āϰāĻž āϏāĻšāϜ āĻšāϝāĻŧāĨ¤ AppMaster-āĻ āϏāĻžāϧāĻžāϰāĻŖāϤ āĻĒā§āϰāϤāĻŋāϟāĻŋ āĻĄāĻŋāĻĒā§āϞāϝāĻŧāĻŽā§‡āĻ¨ā§āĻŸā§‡āϰ āϜāĻ¨ā§āϝ āφāϞāĻžāĻĻāĻž āĻāύāĻ­āĻžāϝāĻŧāϰāύāĻŽā§‡āĻ¨ā§āϟ āĻ•āύāĻĢāĻŋāĻ— āĻĨāĻžāϕ⧇, āĻāĻŦāĻ‚ webhook secret āϏāĻžāĻ°ā§āĻ­āĻžāϰ-āϏāĻžāχāĻĄ āĻ­ā§āϝāĻžāϰāĻŋāϝāĻŧ⧇āĻŦāϞ āĻšāĻŋāϏ⧇āĻŦ⧇ āϰāĻžāĻ–āĻž āĻšāϝāĻŧ, UI āĻŦāĻž āĻŽā§‹āĻŦāĻžāχāϞ/āĻ“āϝāĻŧ⧇āĻŦ āĻ•ā§āϞāĻžāϝāĻŧ⧇āĻ¨ā§āĻŸā§‡ āύāϝāĻŧāĨ¤

āϰ⧇āĻĒā§āϞ⧇ āĻĒā§āϰ⧋āĻŸā§‡āĻ•āĻļāύ āĻ“ āϰ⧋āĻŸā§‡āĻļāύ

āϏāĻŋāĻ—āύ⧇āϚāĻžāϰ āĻŸā§‡āĻŽā§āĻĒāĻžāϰāĻŋāĻ‚ āĻĨāĻžāĻŽāĻžāϝāĻŧ, āĻ•āĻŋāĻ¨ā§āϤ⧁ āĻ¸ā§āĻŦāϝāĻŧāĻ‚āĻ•ā§āϰāĻŋāϝāĻŧāĻ­āĻžāĻŦ⧇ āϰ⧇āĻĒā§āϞ⧇ āĻĨāĻžāĻŽāĻžāϝāĻŧ āύāĻžāĨ¤ āĻĒā§āϰāϤāĻŋāϟāĻŋ āϰāĻŋāϕ⧋āϝāĻŧ⧇āĻ¸ā§āϟāϕ⧇ āĻāĻ•āĻŦāĻžāϰāχ āĻŦ⧈āϧ āĻ•āϰ⧇ āϤ⧁āϞ⧁āύ, āĻŦāĻž āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ āĻāĻ•āϟāĻŋ āϏāĻ‚āĻ•ā§āώāĻŋāĻĒā§āϤ āϏāĻŽāϝāĻŧ āωāχāĻ¨ā§āĻĄā§‹āϤ⧇ āĻ—ā§āϰāĻšāĻŖ āĻ•āϰ⧁āύāĨ¤ āϏāĻžāϧāĻžāϰāĻŖ āĻ…āĻĒāĻļāύāϗ⧁āϞ⧋ āĻšāϞ⧋ āϟāĻžāχāĻŽāĻ¸ā§āĻŸā§āϝāĻžāĻŽā§āĻĒ āĻšā§‡āĻĄāĻžāϰ āϏāĻš āĻ•āĻĄāĻŧāĻž āϏāĻŽāϝāĻŧāϏ⧀āĻŽāĻž, āύāύāϏ, āĻŦāĻž āĻāĻ•āϟāĻŋ idempotency āϕ⧀ āϝāĻž āφāĻĒāύāĻŋ āĻ¸ā§āĻŸā§‹āϰ āĻ•āϰ⧇ āĻĒ⧁āύāϰāĻžāϝāĻŧ āĻĒā§āϰāĻ•ā§āϰāĻŋāϝāĻŧāĻž āĻ•āϰāϤ⧇ āĻ…āĻ¸ā§āĻŦā§€āĻ•āĻžāϰ āĻ•āϰ⧇āύāĨ¤

āϰ⧋āĻŸā§‡āĻļāύ āĻĒāϰāĻŋāĻ•āĻ˛ā§āĻĒāύāĻž āφāϗ⧇ āĻĨ⧇āϕ⧇ āϰāĻžāϖ⧁āύāĨ¤ āĻāĻ•āϟāĻŋ āύāĻŋāϰāĻžāĻĒāĻĻ āĻĒā§āϝāĻžāϟāĻžāĻ°ā§āύ āĻšāϞ⧋ āϏāĻ‚āĻ•ā§āώāĻŋāĻĒā§āϤ overlap-āĻ āĻĻ⧁āχāϟāĻŋ āϏāĻ•ā§āϰāĻŋāϝāĻŧ āϏāĻŋāĻ•ā§āϰ⧇āϟ āϏāĻŽāĻ°ā§āĻĨāύ āĻ•āϰāĻž: āφāĻĒāύāĻŋ provider-āϕ⧇ āφāĻĒāĻĄā§‡āϟ āĻ•āϰāĻžāϰ āϏāĻŽāϝāĻŧ āωāĻ­āϝāĻŧ āϏāĻŋāĻ•ā§āϰ⧇āϟ āĻ—ā§āϰāĻšāĻŖ āĻ•āϰ⧁āύ, āϤāĻžāϰāĻĒāϰ āĻĒ⧁āϰāĻžāϤāύāϟāĻŋ āϰāĻŋāϟāĻžāϝāĻŧāĻžāϰ āĻ•āϰ⧁āύāĨ¤ āĻāĻ•āϟāĻŋ āĻĒāϰāĻŋāĻˇā§āĻ•āĻžāϰ āĻ•āĻžāϟāĻ…āĻĢ āϏāĻŽāϝāĻŧ āϰāĻžāϖ⧁āύ āĻāĻŦāĻ‚ āĻĒ⧁āϰāύ⧋ āϏāĻŋāĻ—āύ⧇āϚāĻžāϰ⧇āϰ āĻŸā§āϰāĻžāĻĢāĻŋāĻ• āĻŽāύāĻŋāϟāϰ āĻ•āϰ⧁āύāĨ¤

āϞāĻ— āύāĻŋāϝāĻŧ⧇ āϏāĻžāĻŦāϧāĻžāύ āĻĨāĻžāϕ⧁āύāĨ¤ Webhook āĻĒ⧇āϞ⧋āĻĄā§‡ āĻĒā§āϰāĻžāϝāĻŧāχ āχāĻŽā§‡āχāϞ, āĻ āĻŋāĻ•āĻžāύāĻž āĻŦāĻž āĻĒ⧇āĻŽā§‡āĻ¨ā§āϟ āĻŽā§‡āϟāĻžāĻĄā§‡āϟāĻž āĻĨāĻžāϕ⧇āĨ¤ āχāϭ⧇āĻ¨ā§āϟ ID, āϟāĻžāχāĻĒ āĻāĻŦāĻ‚ āϭ⧇āϰāĻŋāĻĢāĻŋāϕ⧇āĻļāύ āĻĢāϞāĻžāĻĢāϞ āϞāĻ— āĻ•āϰ⧁āύ, āĻ•āĻŋāĻ¨ā§āϤ⧁ āĻĒ⧁āϰ⧋ āĻĒ⧇āϞ⧋āĻĄ āĻŦāĻž āĻšā§‡āĻĄāĻžāϰ āĻĒā§āϰāĻŋāĻ¨ā§āϟ āĻ•āϰāĻž āĻĨ⧇āϕ⧇ āĻŦāĻŋāϰāϤ āĻĨāĻžāϕ⧁āύāĨ¤

āϏāĻžāϧāĻžāϰāĻŖ āϭ⧁āϞ āĻāĻŦāĻ‚ āĻŸā§āĻ¯ā§āĻ°ā§āϝāĻžāĻĒ

āĻ…āϧāĻŋāĻ•āĻžāĻ‚āĻļ āϞāĻŋāĻ• āϏāĻšāϜ āĻ…āĻ­ā§āϝāĻžāϏ āĻĨ⧇āϕ⧇ āφāϏ⧇ āϝāĻž āĻĄā§‡āϭ⧇āϞāĻĒāĻŽā§‡āĻ¨ā§āĻŸā§‡ āϏ⧁āĻŦāĻŋāϧāĻžāϜāύāĻ• āϞāĻžāϗ⧇, āϤāĻžāϰāĻĒāϰ āĻ¸ā§āĻŸā§‡āϜāĻŋāĻ‚ āĻ“ āĻĒā§āϰ⧋āĻĄāĻžāĻ•āĻļāύ⧇ āĻ•āĻĒāĻŋ āĻšāϝāĻŧ⧇ āϝāĻžāϝāĻŧāĨ¤

āϞ⧋āĻ•āĻžāϞ .env āĻĢāĻžāχāϞāϕ⧇ āϚāĻŋāϰāĻ•āĻžāϞ āύāĻŋāϰāĻžāĻĒāĻĻ āĻ¸ā§āĻĨāĻžāύ⧇ āĻŽāύ⧇ āĻ•āϰāĻž āĻāĻ•āϟāĻŋ āϏāĻžāϧāĻžāϰāĻŖ āĻ¤ā§āϰ⧁āϟāĻŋāĨ¤ āφāĻĒāύāĻžāϰ āĻ˛ā§āϝāĻžāĻĒāϟāĻĒ⧇ āĻāϟāĻž āĻ āĻŋāĻ• āφāϛ⧇, āĻ•āĻŋāĻ¨ā§āϤ⧁ āĻāĻ•āϟāĻŋ āĻŽā§āĻšā§‚āĻ°ā§āϤ⧇ āϤāĻž āϰ⧇āĻĒā§‹āϤ⧇, āĻļ⧇āϝāĻŧāĻžāĻ°ā§āĻĄ āϜāĻŋāĻĒ⧇ āĻŦāĻž āĻĄāĻ•āĻžāϰ āχāĻŽā§‡āĻœā§‡ āĻ•āĻĒāĻŋ āĻšāϞ⧇ āϏ⧇āϟāĻž āĻŦāĻŋāĻĒāĻœā§āϜāύāĻ•āĨ¤ āϝāĻĻāĻŋ āφāĻĒāύāĻŋ .env āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇āύ, āύāĻŋāĻļā§āϚāĻŋāϤ āĻ•āϰ⧁āύ āĻāϟāĻŋ āĻ­āĻžāĻ°ā§āϏāύ āĻ•āĻ¨ā§āĻŸā§āϰ⧋āϞ⧇ ignore āĻ•āϰāĻž āφāϛ⧇ āĻāĻŦāĻ‚ āĻŦāĻžāĻ¸ā§āϤāĻŦ⧇ āĻĄāĻŋāĻĒā§āϞāϝāĻŧāĻŽā§‡āĻ¨ā§āĻŸā§‡ āĻāύāĻ­āĻžāϝāĻŧāϰāύāĻŽā§‡āĻ¨ā§āϟ āϏ⧇āϟāĻŋāĻ‚āϏ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āĻšāĻšā§āϛ⧇āĨ¤

āĻāĻ•āχ āĻ•ā§āϰ⧇āĻĄā§‡āύāĻļāĻŋāϝāĻŧāĻžāϞ āϏāĻŦ āϜāĻžāϝāĻŧāĻ—āĻžāϝāĻŧ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āφāϰ⧇āĻ•āϟāĻŋ āϏāĻžāϧāĻžāϰāĻŖ āϏāĻŽāĻ¸ā§āϝāĻžāĨ¤ āĻāĻ•āĻ• API āϕ⧀ dev, staging, āĻāĻŦāĻ‚ prod-āĻ reuse āĻ•āϰāϞ⧇ dev-āĻ āϕ⧋āύ⧋ āϭ⧁āϞ āĻĒā§āϰ⧋āĻĄ āχāύāϏāĻŋāĻĄā§‡āĻ¨ā§āĻŸā§‡ āĻĒāϰāĻŋāĻŖāϤ āĻšāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ āφāϞāĻžāĻĻāĻž āϕ⧀ āϰ⧋āĻŸā§‡āϟ, āϰāĻŋāĻ­ā§‹āĻ• āĻāĻŦāĻ‚ āĻ…āĻĄāĻŋāϟ āĻ•āϰāĻž āϏāĻšāϜ āĻ•āϰ⧇āĨ¤

āĻ“āϝāĻŧ⧇āĻŦ āĻĢā§āϰāĻ¨ā§āϟāĻāĻ¨ā§āĻĄ āĻ“ āĻŽā§‹āĻŦāĻžāχāϞ āĻ…ā§āϝāĻžāĻĒ⧇ āĻŦāĻŋāĻ˛ā§āĻĄ āϟāĻžāχāĻŽā§‡ āϏāĻŋāĻ•ā§āϰ⧇āϟ āχāύāĻœā§‡āĻ•āĻļāύ āĻ•āϰāĻž āĻŦāĻŋāĻļ⧇āώāĻ­āĻžāĻŦ⧇ āĻā§āρāĻ•āĻŋāĻĒā§‚āĻ°ā§āĻŖāĨ¤ āϝāĻĻāĻŋ āϕ⧋āύ⧋ āĻ—ā§‹āĻĒāύ āĻ•āĻŽā§āĻĒāĻžāχāĻ˛ā§āĻĄ āĻŦāĻžāĻ¨ā§āĻĄāϞ⧇ āĻŦāĻž āĻ…ā§āϝāĻžāĻĒ āĻĒā§āϝāĻžāϕ⧇āĻœā§‡ āĻĒāĻĄāĻŧ⧇ āϝāĻžāϝāĻŧ, āϧāϰ⧇ āύāĻŋāύ āϤāĻž āĻāĻ•ā§āϏāĻŸā§āϰāĻžāĻ•ā§āϟ āĻ•āϰāĻž āϝāĻžāĻŦ⧇āĨ¤ āĻĢā§āϰāĻ¨ā§āĻŸā§‡āĻ¨ā§āĻĄāϗ⧁āϞ⧋ āϕ⧇āĻŦāϞ āĻĒāĻžāĻŦāϞāĻŋāĻ• āĻ•āύāĻĢāĻŋāĻ— āϰāĻžāĻ–āϤ⧇ āĻĒāĻžāϰ⧇ (āϝ⧇āĻŽāύ āĻŦ⧇āϏ API URL)āĨ¤ āϏāĻ‚āĻŦ⧇āĻĻāύāĻļā§€āϞ āĻ•āĻŋāϛ⧁ āϏāĻžāĻ°ā§āĻ­āĻžāϰ⧇āϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āϰ⧁āϟ āĻ•āϰāĻž āωāϚāĻŋāϤāĨ¤

āϞāĻ— āĻāĻ•āϟāĻŋ āϚ⧁āĻĒāϚāĻžāĻĒ āϞāĻŋāĻ• āϏ⧋āĻ°ā§āϏāĨ¤ "āĻ…āĻ¸ā§āĻĨāĻžāϝāĻŧā§€" āĻĄāĻŋāĻŦāĻžāĻ— āĻĒā§āϰāĻŋāĻ¨ā§āϟ āĻŽāĻžāϏāϗ⧁āϞ⧋āϰ āϜāĻ¨ā§āϝ āĻĨāĻžāĻ•āϤ⧇ āĻĒāĻžāϰ⧇ āĻāĻŦāĻ‚ āĻļāĻŋāĻĒ āĻšāϝāĻŧ⧇ āϝ⧇āϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ āϝāĻĻāĻŋ āĻŽāĻžāύ āύāĻŋāĻļā§āϚāĻŋāϤ āĻ•āϰāϤ⧇ āϞāĻ— āĻ•āϰāϤ⧇ āĻšāϝāĻŧ, āϕ⧇āĻŦāϞ āĻŽāĻžāĻ¸ā§āĻ• āĻ•āϰāĻž āϏāĻ‚āĻ¸ā§āĻ•āϰāĻŖ āϞāĻ— āĻ•āϰ⧁āύ (āωāĻĻāĻžāĻšāϰāĻŖ: āĻļ⧇āώ 4 āĻ…āĻ•ā§āώāϰ) āĻāĻŦāĻ‚ āϏāĻŸā§‡āχ āĻ¸ā§āĻŸā§‡āϟāĻŽā§‡āĻ¨ā§āϟāϟāĻŋ āϏāϰāĻŋāϝāĻŧ⧇ āĻĻāĻŋāύāĨ¤

āϰ⧇āĻĄ āĻĢā§āĻ˛ā§āϝāĻžāĻ— āϝāĻž āϏāĻžāϧāĻžāϰāĻŖāϤ āϏāĻŽāĻ¸ā§āϝāĻž āĻŦā§‹āĻāĻžāϝāĻŧ

  • āĻ—ā§‹āĻĒāύ Git āχāϤāĻŋāĻšāĻžāϏ⧇ āĻĻ⧇āĻ–āĻž āϝāĻžāϝāĻŧ, āĻāĻŽāύāĻ•āĻŋ āĻĒāϰ⧇ āϏāϰāĻžāύ⧋ āĻšāϝāĻŧ⧇āϛ⧇ āĻŦāϞ⧇āĻ“āĨ¤
  • āĻāĻ•āϟāĻŋ āϕ⧀ āϏāĻŦ āĻāύāĻ­āĻžāϝāĻŧāϰāύāĻŽā§‡āĻ¨ā§āĻŸā§‡ āĻ•āĻžāϜ āĻ•āϰ⧇āĨ¤
  • āĻāĻ•āϟāĻŋ āĻŽā§‹āĻŦāĻžāχāϞ āĻ…ā§āϝāĻžāĻĒ⧇ āϭ⧇āĻ¨ā§āĻĄāϰ āϕ⧀ āĻŦāĻž SMTP āĻĒāĻžāϏāĻ“āϝāĻŧāĻžāĻ°ā§āĻĄ āφāϛ⧇āĨ¤
  • āϏāĻžāĻĒā§‹āĻ°ā§āϟ āϟāĻŋāϕ⧇āĻŸā§‡ āĻĒā§‚āĻ°ā§āĻŖ āϰāĻŋāϕ⧋āϝāĻŧ⧇āĻ¸ā§āϟ āĻĄāĻžāĻŽā§āĻĒ āφāϛ⧇ āĻšā§‡āĻĄāĻžāϰāϏāĻšāĨ¤
  • āĻŽāĻžāύāϗ⧁āϞ⧋ Base64-āĻ āϰāĻžāĻ–āĻž āĻŦāĻž āĻĢāĻ°ā§āĻŽ āĻĢāĻŋāĻ˛ā§āĻĄā§‡ "āϞ⧁āĻ•āĻžāύ⧋" āφāϛ⧇āĨ¤

āĻāύāϕ⧋āĻĄāĻŋāĻ‚ āϏ⧁āϰāĻ•ā§āώāĻž āύāϝāĻŧ, āĻāĻŦāĻ‚ āϞ⧁āĻ•āĻžāύ⧋ āĻĢāĻŋāĻ˛ā§āĻĄ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϰ āϜāĻ¨ā§āϝ āĻāĻ–āύāĻ“ āĻĻ⧃āĻļā§āϝāĻŽāĻžāύāĨ¤

AppMaster-āĻ āĻ•āĻžāϜ āĻ•āϰāϞ⧇, āĻĒā§āϰāϤāĻŋāϟāĻŋ āĻĄāĻŋāĻĒā§āϞāϝāĻŧāĻŽā§‡āĻ¨ā§āϟ āϟāĻžāĻ°ā§āϗ⧇āĻŸā§‡āϰ āϜāĻ¨ā§āϝ āĻāύāĻ­āĻžāϝāĻŧāϰāύāĻŽā§‡āĻ¨ā§āϟ-āϞ⧇āϭ⧇āϞ āĻ•āύāĻĢāĻŋāϗ⧇ āϏāĻ‚āĻŦ⧇āĻĻāύāĻļā§€āϞ āĻŽāĻžāύ āϰāĻžāϖ⧁āύ āĻāĻŦāĻ‚ āĻ•ā§āϞāĻžāϝāĻŧ⧇āĻ¨ā§āϟ āĻ…ā§āϝāĻžāĻĒ⧇ āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ āĻ…-āϏāĻ‚āĻŦ⧇āĻĻāύāĻļā§€āϞ āϏ⧇āϟāĻŋāĻ‚ āĻĒāĻžāϏ āĻ•āϰ⧁āύāĨ¤ āĻāĻ•āϟāĻŋ āĻŦāĻžāĻ¸ā§āϤāĻŦāϤāĻžāĻšā§‡āĻ•: āĻŦā§āϰāĻžāωāϜāĻžāϰ āϝāĻĻāĻŋ āĻĻ⧇āĻ–āϤ⧇ āĻĒāĻžāϰ⧇, āϏ⧇āϟāĻž āĻĒāĻžāĻŦāϞāĻŋāĻ• āĻ­āĻžāĻŦ⧁āύāĨ¤

āĻļāĻŋāĻĒ āĻ•āϰāĻžāϰ āφāϗ⧇ āĻĻā§āϰ⧁āϤ āĻšā§‡āĻ•āϞāĻŋāĻ¸ā§āϟ

Ship web and mobile securely
Generate web and native mobile apps without embedding private keys in client bundles.
Build App

"āϕ⧀ āϞāĻŋāĻ• āĻšāϤ⧇ āĻĒāĻžāϰ⧇" āĻāχ āĻŽāύ⧋āĻ­āĻžāĻŦ āύāĻŋāϝāĻŧ⧇ āĻāĻ•āϟāĻŋ āĻĢāĻžāχāύāĻžāϞ āĻĒāĻžāϏ āĻ•āϰ⧁āύāĨ¤ āĻŦ⧇āĻļāĻŋāϰāĻ­āĻžāĻ— āχāύāϏāĻŋāĻĄā§‡āĻ¨ā§āϟ āĻ…āĻĒā§āϰ⧀āϤāĻŋāĻ•āϰ āĻāĻŦāĻ‚ āϏāĻžāϧāĻžāϰāĻŖ: āĻāĻ•āϟāĻŋ āϕ⧀ āϟāĻŋāĻ•āĻŸā§‡ āĻĒ⧇āĻ¸ā§āϟ āĻ•āϰāĻž, āĻ•āύāĻĢāĻŋāĻ— āĻĒā§āϝāĻžāύ⧇āϞ⧇āϰ āĻ¸ā§āĻ•ā§āϰāĻŋāύāĻļāϟ, āĻŦāĻž āĻŦāĻŋāĻ˛ā§āĻĄ āφāĻ°ā§āϟāĻŋāĻĢā§āϝāĻžāĻ•ā§āϟ āϝāĻž āϚ⧁āĻĒāϚāĻžāĻĒ āĻ—ā§‹āĻĒāύ āĻ…āĻ¨ā§āϤāĻ°ā§āϭ⧁āĻ•ā§āϤ āĻ•āϰ⧇āĨ¤

āĻļāĻŋāĻĒ āĻ•āϰāĻžāϰ āφāϗ⧇ āĻāχ āĻ­āĻŋāĻ¤ā§āϤāĻŋāϗ⧁āϞ⧋ āϝāĻžāϚāĻžāχ āĻ•āϰ⧁āύ:

  • āĻ—ā§‹āĻĒāύāϗ⧁āϞ⧋ āϰ⧇āĻĒā§‹ āχāϤāĻŋāĻšāĻžāϏ⧇, āχāĻ¸ā§āϝ⧁, āĻĄāĻ•āϏ, āĻ¸ā§āĻ•ā§āϰāĻŋāύāĻļāϟ āĻŦāĻž āĻšā§āϝāĻžāϟ āϞāϗ⧇ āύ⧇āχāĨ¤ āϝāĻĻāĻŋ āĻ•āĻ–āύ⧋ āĻĒ⧇āĻ¸ā§āϟ āĻ•āϰāĻž āĻšāϝāĻŧ⧇ āĻĨāĻžāϕ⧇, āϧāϰ⧇ āύāĻŋāύ āϤāĻž āϏāĻŽā§āĻŽā§āĻ–āĻ­āĻžāϗ⧇ āĻĒā§āϰāĻ•āĻžāĻļāĻŋāϤ āĻšāϝāĻŧ⧇āϛ⧇ āĻāĻŦāĻ‚ āϰ⧋āĻŸā§‡āϟ āĻ•āϰ⧁āύāĨ¤
  • āφāĻĒāύāĻžāϰ āĻ“āϝāĻŧ⧇āĻŦ āĻ“ āĻŽā§‹āĻŦāĻžāχāϞ āĻŦāĻŋāĻ˛ā§āĻĄā§‡ āϕ⧇āĻŦāϞ āĻĒāĻžāĻŦāϞāĻŋāĻ• āϏ⧇āϟāĻŋāĻ‚āϏ āφāϛ⧇ (āϝ⧇āĻŽāύ API āĻŦ⧇āϏ URL āĻŦāĻž āĻĢāĻŋāϚāĻžāϰ āĻĢā§āĻ˛ā§āϝāĻžāĻ—)āĨ¤ āĻĒā§āϰāĻžāχāϭ⧇āϟ āϕ⧀āϗ⧁āϞāĻŋ, SMTP āĻĒāĻžāϏāĻ“āϝāĻŧāĻžāĻ°ā§āĻĄ, āĻāĻŦāĻ‚ webhook signing secrets āϏāĻžāĻ°ā§āĻ­āĻžāϰ-āϏāĻžāχāĻĄā§‡ āĻŦāĻž āĻāύāĻ­āĻžāϝāĻŧāϰāύāĻŽā§‡āĻ¨ā§āϟ-āĻ¸ā§āĻĒ⧇āϏāĻŋāĻĢāĻŋāĻ• āϏāĻŋāĻ•ā§āϰ⧇āϟ āĻ¸ā§āĻŸā§‹āϰ⧇ āĻĨāĻžāĻ•āĻž āωāϚāĻŋāϤāĨ¤
  • āĻ¸ā§āĻŸā§‡āϜāĻŋāĻ‚ āĻĒā§āϰ⧋āĻĄāĻžāĻ•āĻļāύ āĻĨ⧇āϕ⧇ āĻŦāĻŋāĻšā§āĻ›āĻŋāĻ¨ā§āύāĨ¤ āĻ¸ā§āĻŸā§‡āϜāĻŋāĻ‚āϝāĻŧ⧇āϰ āφāϞāĻžāĻĻāĻž API āϕ⧀, āφāϞāĻžāĻĻāĻž SMTP āĻāĻ•āĻžāωāĻ¨ā§āϟ, āĻāĻŦāĻ‚ āφāϞāĻžāĻĻāĻž webhook secret āĻĨāĻžāĻ•āĻž āωāϚāĻŋāϤāĨ¤ āĻ¸ā§āĻŸā§‡āϜāĻŋāĻ‚ āĻ•āĻ–āύ⧋ āĻĒā§āϰ⧋āĻĄ āĻĄāĻžāϟāĻžāĻŦ⧇āϏ āĻŦāĻž āĻĒā§āϰ⧋āĻĄ āϏāĻŋāĻ•ā§āϰ⧇āϟ āĻŽā§āϝāĻžāύ⧇āϜāĻžāϰ āĻĒāĻĄāĻŧāĻžāϰ āĻ•ā§āώāĻŽāϤāĻž āĻĨāĻžāĻ•āĻž āωāϚāĻŋāϤ āύāϝāĻŧāĨ¤
  • CI āϞāĻ—, āĻŽāύāĻŋāϟāϰāĻŋāĻ‚, āĻāĻŦāĻ‚ āĻāϰāϰ āϰāĻŋāĻĒā§‹āĻ°ā§āϟāĻŋāĻ‚ āϏāĻ‚āĻŦ⧇āĻĻāύāĻļā§€āϞ āĻŽāĻžāύ āĻĒā§āϰāĻŋāĻ¨ā§āϟ āĻ•āϰ⧇ āύāĻžāĨ¤ āĻŦāĻŋāĻ˛ā§āĻĄ āφāωāϟāĻĒ⧁āϟ, āĻ•ā§āĻ°ā§āϝāĻžāĻļ āϰāĻŋāĻĒā§‹āĻ°ā§āϟ āĻāĻŦāĻ‚ āĻĄāĻŋāĻŦāĻžāĻ— āϞāĻ— āĻšā§‡āĻ• āĻ•āϰ⧁āύāĨ¤ āĻŸā§‹āϕ⧇āύ āĻŽāĻžāĻ¸ā§āĻ• āĻ•āϰ⧁āύ āĻāĻŦāĻ‚ Authorization āĻŽāϤ⧋ āĻšā§‡āĻĄāĻžāϰāϗ⧁āϞ⧋ āϰ⧇āĻĄā§āϝāĻžāĻ•ā§āϟ āĻ•āϰ⧁āύāĨ¤
  • āφāĻĒāύāĻŋ āĻĻā§āϰ⧁āϤ āϕ⧋āĻĄ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ›āĻžāĻĄāĻŧāĻž āϰ⧋āĻŸā§‡āϟ āĻ“ āϰāĻŋāĻ­ā§‹āĻ• āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύāĨ¤ āύāĻŋāĻļā§āϚāĻŋāϤ āĻ•āϰ⧁āύ āϏāĻŋāĻ•ā§āϰ⧇āϟ āĻĄāĻŋāĻĒā§āϞāϝāĻŧ āϟāĻžāχāĻŽā§‡ āχāύāĻœā§‡āĻ•ā§āϟ āĻ•āϰāĻž āĻšāϝāĻŧ (āĻāύāĻ­āĻžāϝāĻŧāϰāύāĻŽā§‡āĻ¨ā§āϟ āĻ­ā§āϝāĻžāϰāĻŋāϝāĻŧ⧇āĻŦāϞ āĻŦāĻž āϏāĻŋāĻ•ā§āϰ⧇āϟ āĻŽā§āϝāĻžāύ⧇āϜāĻžāϰ), āϤāĻžāχ āϕ⧀ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻāĻ•āϟāĻŋ āĻ•āύāĻĢāĻŋāĻ— āφāĻĒāĻĄā§‡āĻŸā§‡ āĻšāϝāĻŧ⧇ āϝāĻžāϝāĻŧ, āϜāϰ⧁āϰāĻŋ āĻĒ⧁āύāĻ°ā§āĻŦāĻŋāĻ˛ā§āĻĄ āύāϝāĻŧāĨ¤

AppMaster āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϞ⧇, āĻĒā§āϰāϤāĻŋāϟāĻŋ āĻāύāĻ­āĻžāϝāĻŧāϰāύāĻŽā§‡āĻ¨ā§āĻŸā§‡āϰ āϜāĻ¨ā§āϝ āϏāĻŋāĻ•ā§āϰ⧇āϟāϗ⧁āϞ⧋āϕ⧇ āĻĄāĻŋāĻĒā§āϞāϝāĻŧāĻŽā§‡āĻ¨ā§āϟ-āϟāĻžāχāĻŽ āĻ•āύāĻĢāĻŋāĻ— āĻŽāύ⧇ āĻ•āϰ⧁āύ, UI āĻ¸ā§āĻ•ā§āϰāĻŋāύ āĻŦāĻž āĻāĻ•ā§āϏāĻĒā§‹āĻ°ā§āĻŸā§‡āĻĄ āĻŦāĻŋāĻ˛ā§āĻĄā§‡ āύāϝāĻŧāĨ¤ āĻāĻ•āϟāĻŋ āĻĻāϰāĻ•āĻžāϰ⧀ āĻļ⧇āώ āĻšā§‡āĻ• āĻšāϞ⧋ āĻ•āĻŽā§āĻĒāĻžāχāϞāĻĄ āφāĻ°ā§āϟāĻŋāĻĢā§āϝāĻžāĻ•ā§āϟ āĻ“ āϞāϗ⧇ āϏāĻžāϧāĻžāϰāĻŖ āĻĒā§āϝāĻžāϟāĻžāĻ°ā§āύāϗ⧁āϞ⧋āϰ āϜāĻ¨ā§āϝ āϏāĻžāĻ°ā§āϚ āĻ•āϰāĻž, āϝ⧇āĻŽāύ sk_live, Bearer , āĻŦāĻž SMTP āĻšā§‹āĻ¸ā§āϟāύ⧇āĻŽāĨ¤

āĻĒā§āϰāϤāĻŋāϟāĻŋ āχāĻ¨ā§āϟāĻŋāĻ—ā§āϰ⧇āĻļāύ⧇āϰ āϜāĻ¨ā§āϝ “āĻ•āĻŋāϞ āϏ⧁āχāĻšâ€ āϞāĻŋāϖ⧇ āϰāĻžāϖ⧁āύ: āϕ⧀ āϕ⧋āĻĨāĻžāϝāĻŧ āĻĄāĻŋāĻœā§‡āĻŦāϞ āĻ•āϰāĻŦ⧇āύ, āĻāĻŦāĻ‚ āϕ⧇ āϤāĻž āĻĒāĻžāρāϚ āĻŽāĻŋāύāĻŋāĻŸā§‡āϰ āĻŽāĻ§ā§āϝ⧇ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤

āωāĻĻāĻžāĻšāϰāĻŖ āĻĻ⧃āĻļā§āϝ: āĻĒ⧇āĻŽā§‡āĻ¨ā§āϟ, āχāĻŽā§‡āχāϞ, āĻāĻŦāĻ‚ āĻ“āϝāĻŧ⧇āĻŦāĻšā§āĻ•

Turn incident steps into automation
Use the Business Process Editor to automate key revokes and rotations after exposure.
Automate Now

āĻāĻ•āϟāĻŋ āϤāĻŋāύ-āϜāύ⧇āϰ āϟāĻŋāĻŽ āĻāĻ•āϟāĻŋ āĻ•āĻžāĻ¸ā§āϟāĻŽāĻžāϰ āĻĒā§‹āĻ°ā§āϟāĻžāϞ (āĻ“āϝāĻŧ⧇āĻŦ), āĻāĻ•āϟāĻŋ āĻŽā§‹āĻŦāĻžāχāϞ āĻ…ā§āϝāĻžāĻĒ, āĻāĻŦāĻ‚ āϛ⧋āϟ āĻŦā§āϝāĻžāĻ•āĻ—ā§āϰāĻžāωāĻ¨ā§āĻĄ āϜāĻŦ āϚāĻžāϞāĻžāϝāĻŧ āϝāĻž āϰāϏāĻŋāĻĻ āĻĒāĻžāĻ āĻžāϝāĻŧ āĻ“ āĻĄā§‡āϟāĻž āϏāĻŋāĻ™ā§āĻ• āĻ•āϰ⧇āĨ¤ āϤāĻžāĻĻ⧇āϰ āϤāĻŋāύāϟāĻŋ āĻāύāĻ­āĻžāϝāĻŧāϰāύāĻŽā§‡āĻ¨ā§āϟ āφāϛ⧇: āϞ⧋āĻ•āĻžāϞ dev, QA-āĻāϰ āϜāĻ¨ā§āϝ staging, āĻāĻŦāĻ‚ āĻŦāĻžāĻ¸ā§āϤāĻŦ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϰ āϜāĻ¨ā§āϝ prodāĨ¤ āϤāĻžāϰāĻž āϚāĻžāϝāĻŧ āĻāĻŽāύ āĻāĻ•āϟāĻŋ āϏāĻŋāĻ•ā§āϰ⧇āϟ āĻ“ āĻ•āύāĻĢāĻŋāĻ— āϏ⧇āϟāφāĻĒ āϝāĻž āĻĻ⧈āύāĻ¨ā§āĻĻāĻŋāύ āĻ•āĻžāϜāϕ⧇ āϧ⧀āϰ āĻ•āϰ⧇ āĻĻ⧇āĻŦ⧇ āύāĻžāĨ¤

Dev-āĻ āϤāĻžāϰāĻž āϕ⧇āĻŦāϞ āĻ¸ā§āϝāĻžāĻ¨ā§āĻĄāĻŦāĻ•ā§āϏ āĻĒ⧇āĻŽā§‡āĻ¨ā§āϟ āϕ⧀ āĻ“ āĻŸā§‡āĻ¸ā§āϟ SMTP āĻāĻ•āĻžāωāĻ¨ā§āϟ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇āĨ¤ āĻĒā§āϰāϤāĻŋāϟāĻŋ āĻĄā§‡āĻ­ āϤāĻžāϰ āϞ⧋āĻ•āĻžāϞ āĻāύāĻ­āĻžāϝāĻŧāϰāύāĻŽā§‡āĻ¨ā§āϟ āĻ­ā§āϝāĻžāϰāĻŋāϝāĻŧ⧇āĻŦāϞ⧇ āϏāĻŋāĻ•ā§āϰ⧇āϟ āϰāĻžāϖ⧇ (āĻŦāĻž āĻāĻ•āϟāĻŋ āϞ⧋āĻ•āĻžāϞ āφāύāĻŸā§āĻ°ā§āϝāĻžāĻ•āĻĄ āĻĢāĻžāχāϞ āϝāĻž env āĻ­ā§āϝāĻžāϰāĻŋāϝāĻŧ⧇āĻŦāϞ⧇ āϞ⧋āĻĄ āĻšāϝāĻŧ), āϝāĻžāϤ⧇ āĻ•āĻŋāϛ⧁āχ āϰ⧇āĻĒā§‹āϤ⧇ āύāĻž āϝāĻžāϝāĻŧāĨ¤ āĻ“āϝāĻŧ⧇āĻŦ āĻ…ā§āϝāĻžāĻĒ, āĻŽā§‹āĻŦāĻžāχāϞ āĻ…ā§āϝāĻžāĻĒ, āĻ“ āĻŦā§āϝāĻžāĻ•āĻ—ā§āϰāĻžāωāĻ¨ā§āĻĄ āϜāĻŦ āĻāĻ•āχ āĻ­ā§āϝāĻžāϰāĻŋāϝāĻŧ⧇āĻŦāϞ āύāĻžāĻŽ āĻĒāĻĄāĻŧ⧇ — āϝ⧇āĻŽāύ PAYMENTS_KEY, SMTP_USER, āĻāĻŦāĻ‚ WEBHOOK_SECRET—āĻ•āĻŋāĻ¨ā§āϤ⧁ āĻĒā§āϰāϤāĻŋāϟāĻŋ āĻāύāĻ­āĻžāϝāĻŧāϰāύāĻŽā§‡āĻ¨ā§āĻŸā§‡ āĻ­ā§āϝāĻžāϞ⧁āϗ⧁āϞ⧋ āφāϞāĻžāĻĻāĻžāĨ¤

Staging-āĻ CI āĻŦāĻŋāĻ˛ā§āĻĄ āĻĄāĻŋāĻĒā§āϞāϝāĻŧ āĻ•āϰ⧇, āĻāĻŦāĻ‚ āĻĒā§āĻ˛ā§āϝāĻžāϟāĻĢāĻ°ā§āĻŽ āϰāĻžāύāϟāĻžāχāĻŽā§‡ āϏāĻŋāĻ•ā§āϰ⧇āϟ āχāύāĻœā§‡āĻ•ā§āϟ āĻ•āϰ⧇āĨ¤ Staging āύāĻŋāĻœā§‡āϰ āĻĒ⧇āĻŽā§‡āĻ¨ā§āϟ āĻāĻ•āĻžāωāĻ¨ā§āϟ, āύāĻŋāĻœā§‡āϰ SMTP āĻ•ā§āϰ⧇āĻĄā§‡āύāĻļāĻŋāϝāĻŧāĻžāϞ āĻāĻŦāĻ‚ āύāĻŋāĻœā§‡āϰ webhook signing secret āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇āĨ¤ QA āĻŦāĻžāĻ¸ā§āϤāĻŦ āĻĢā§āϞ⧋ āĻŸā§‡āĻ¸ā§āϟ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇ āĻ•āĻŋāĻ¨ā§āϤ⧁ āĻĒā§āϰ⧋āĻĄ āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽā§‡ āφāϘāĻžāϤ āĻšāĻŦ⧇āύāĻžāĨ¤

Prod-āĻ āĻāĻ•āχ āĻŦāĻŋāĻ˛ā§āĻĄ āφāĻ°ā§āϟāĻŋāĻĢā§āϝāĻžāĻ•ā§āϟ āĻĄāĻŋāĻĒā§āϞāϝāĻŧ āĻ•āϰāĻž āĻšāϝāĻŧ, āĻ•āĻŋāĻ¨ā§āϤ⧁ āϏāĻŋāĻ•ā§āϰ⧇āϟāϗ⧁āϞ⧋ āĻāĻ•āϟāĻŋ āĻĄā§‡āĻĄāĻŋāϕ⧇āĻŸā§‡āĻĄ āϏāĻŋāĻ•ā§āϰ⧇āϟ āĻ¸ā§āĻŸā§‹āϰ (āĻŦāĻž āĻ•ā§āϞāĻžāωāĻĄ āĻĒā§āϰ⧋āĻ­āĻžāχāĻĄāĻžāϰ⧇āϰ āϏāĻŋāĻ•ā§āϰ⧇āϟ āĻŽā§āϝāĻžāύ⧇āϜāĻžāϰ) āĻĨ⧇āϕ⧇ āφāϏ⧇ āĻāĻŦāĻ‚ āϕ⧇āĻŦāϞ āϰāĻžāύāĻŋāĻ‚ āϏāĻžāĻ°ā§āĻ­āĻŋāϏāϗ⧁āϞ⧋āχ āϏ⧇āϗ⧁āϞ⧋ āĻĒāĻĄāĻŧāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ āϟāĻŋāĻŽ āφāϰāĻ“ āϟāĻžāχāϟ āĻĒāĻžāϰāĻŽāĻŋāĻļāύ āĻĻ⧇āϝāĻŧ: āϕ⧇āĻŦāϞ āĻŦā§āϝāĻžāĻ•āĻ—ā§āϰāĻžāωāĻ¨ā§āĻĄ āϜāĻŦ SMTP āĻ•ā§āϰ⧇āĻĄā§‡āύāĻļāĻŋāϝāĻŧāĻžāϞ āĻĒāĻĄāĻŧāĻŦ⧇, āĻāĻŦāĻ‚ āϕ⧇āĻŦāϞ webhook āĻšā§āϝāĻžāĻ¨ā§āĻĄāϞāĻžāϰ webhook secret āĻĒāĻĄāĻŧāĻŦ⧇āĨ¤

āϕ⧋āύ⧋ āϕ⧀ āĻāĻ•ā§āϏāĻĒā§‹āϜ āĻšāϞ⧇ (āωāĻĻāĻžāĻšāϰāĻŖ: āĻāĻ•āϟāĻŋ āĻ¸ā§āĻ•ā§āϰāĻŋāύāĻļāϟ API āϕ⧀ āĻĻ⧇āĻ–āĻžāϝāĻŧ), āϤāĻžāĻĻ⧇āϰ āĻĢāĻŋāĻ•ā§āϏāĻĄ āĻĒā§āϞ⧇āĻŦ⧁āĻ• āφāϛ⧇:

  • āĻāĻ•ā§āϏāĻĒā§‹āϜ āĻšāĻ“āϝāĻŧāĻž āϕ⧀ āĻ…āĻŦāĻŋāϞāĻŽā§āĻŦ⧇ āϰāĻŋāĻ­ā§‹āĻ• āĻ•āϰ⧇ āĻāĻŦāĻ‚ āϏāĻŽā§āĻĒāĻ°ā§āĻ•āĻŋāϤ āϏāĻŋāĻ•ā§āϰ⧇āϟ āϰ⧋āĻŸā§‡āϟ āĻ•āϰ⧁āύāĨ¤
  • āĻāĻ•ā§āϏāĻĒā§‹āϜāĻžāϰ⧇āϰ āϏāĻŽāϝāĻŧāĻ•āĻžāϞ⧇āϰ āĻŽāĻ§ā§āϝ⧇ āϏāĻ¨ā§āĻĻ⧇āĻšāϜāύāĻ• āĻŦā§āϝāĻŦāĻšāĻžāϰ āϞāĻ—āϗ⧁āϞ⧋ āϖ⧁āρāϜ⧁āύāĨ¤
  • āύāϤ⧁āύ āĻ­ā§āϝāĻžāϞ⧁ āĻĒ⧇āϤ⧇ āϏāĻžāĻ°ā§āĻ­āĻŋāϏāϗ⧁āϞ⧋ āĻĒ⧁āύāϰāĻžāϝāĻŧ āĻĄāĻŋāĻĒā§āϞāϝāĻŧ āĻ•āϰ⧁āύāĨ¤
  • āϕ⧀ āϘāĻŸā§‡āϛ⧇ āϤāĻž āĻĄāϕ⧁āĻŽā§‡āĻ¨ā§āϟ āĻ•āϰ⧁āύ āĻāĻŦāĻ‚ āĻāĻ•āϟāĻŋ āĻ—āĻžāĻ°ā§āĻĄāϰ⧇āχāϞ āϝ⧋āĻ— āĻ•āϰ⧁āύ (āϝ⧇āĻŽāύ pre-commit āĻ¸ā§āĻ•ā§āϝāĻžāύ)āĨ¤

āϞ⧋āĻ•āĻžāϞ āĻ•āĻžāϜ āϏāĻšāϜ āϰāĻžāĻ–āϤ⧇, āϤāĻžāϰāĻž āĻ•āĻ–āύ⧋ āĻĒā§āϰ⧋āĻĄ āϏāĻŋāĻ•ā§āϰ⧇āϟ āĻļ⧇āϝāĻŧāĻžāϰ āĻ•āϰ⧇ āύāĻžāĨ¤ āĻĄā§‡āĻ­āϰāĻž āĻ¸ā§āϝāĻžāĻ¨ā§āĻĄāĻŦāĻ•ā§āϏ āĻ…ā§āϝāĻžāĻ•āĻžāωāĻ¨ā§āϟ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇, āĻāĻŦāĻ‚ āϝāĻĻāĻŋ AppMaster-āϰ āĻŽāϤ⧋ no-code āϟ⧁āϞ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇, āϤāĻžāϰāĻž dev, staging, āĻāĻŦāĻ‚ prod-āĻāϰ āϜāĻ¨ā§āϝ āφāϞāĻžāĻĻāĻž āĻāύāĻ­āĻžāϝāĻŧāϰāύāĻŽā§‡āĻ¨ā§āϟ āĻ­ā§āϝāĻžāϞ⧁ āϏāĻ‚āϰāĻ•ā§āώāĻŖ āĻ•āϰ⧇ āϝāĻžāϤ⧇ āĻāĻ•āχ āĻ…ā§āϝāĻžāĻĒ āϞāϜāĻŋāĻ• āϏāĻŦ āϜāĻžāϝāĻŧāĻ—āĻžāϝāĻŧ āύāĻŋāϰāĻžāĻĒāĻĻ⧇ āϚāϞ⧇āĨ¤

āĻĒāϰāĻŦāĻ°ā§āϤ⧀ āϧāĻžāĻĒ: āφāĻĒāύāĻžāϰ āĻ“āϝāĻŧāĻžāĻ°ā§āĻ•āĻĢā§āϞ⧋āϤ⧇ āĻāϟāĻŋ āĻĒ⧁āύāϰāĻžāĻŦ⧃āĻ¤ā§āϤāĻŋāĻŽā§‚āϞāĻ• āĻ•āϰ⧁āύ

āĻ—ā§‹āĻĒāύ āύāĻŋāϝāĻŧ⧇ āĻ•āĻžāϜāϟāĻžāϕ⧇ āĻšāĻžāχāϜāĻŋāύ⧇āϰ āĻŽāϤ⧋ āφāϚāϰāĻŖ āĻ•āϰ⧁āύāĨ¤ āĻĒā§āϰāĻĨāĻŽāĻŦāĻžāϰ āĻāϟāĻž āϜāϟāĻŋāϞ āĻŽāύ⧇ āĻšāĻŦ⧇, āĻĒāϰ⧇ āϰ⧁āϟāĻŋāύ āĻšāϝāĻŧ⧇ āϝāĻžāĻŦ⧇āĨ¤

āĻļ⧁āϰ⧁ āĻ•āϰ⧁āύ āĻāĻ•āϟāĻŋ āϏāĻšāϜ āϏāĻŋāĻ•ā§āϰ⧇āϟ āĻŽā§āϝāĻžāĻĒ āϞāĻŋāϖ⧇:

  • āϏāĻŋāĻ•ā§āϰ⧇āϟāϟāĻŋ āϕ⧀ (API key, SMTP password, webhook secret)
  • āϕ⧋āĻĨāĻžāϝāĻŧ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻšāϝāĻŧ (āϏāĻžāĻ°ā§āĻ­āĻŋāϏ, āϜāĻŦ, āĻŽā§‹āĻŦāĻžāχāϞ āĻ…ā§āϝāĻžāĻĒ, āϭ⧇āĻ¨ā§āĻĄāϰ āĻĄā§āϝāĻžāĻļāĻŦā§‹āĻ°ā§āĻĄ)
  • āĻĒā§āϰāϤāĻŋāϟāĻŋ āĻāύāĻ­āĻžāϝāĻŧāϰāύāĻŽā§‡āĻ¨ā§āĻŸā§‡ āϕ⧋āĻĨāĻžāϝāĻŧ āĻ¸ā§āĻŸā§‹āϰ āĻ•āϰāĻž āφāϛ⧇ (dev, staging, prod)
  • āϕ⧇ āĻ…ā§āϝāĻžāĻ•ā§āϏ⧇āϏ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇ (āĻŽāĻžāύ⧁āώ, CI/CD, āϕ⧇āĻŦāϞ āϰāĻžāύāϟāĻžāχāĻŽ)
  • āϕ⧀āĻ­āĻžāĻŦ⧇ āϰ⧋āĻŸā§‡āϟ āĻ•āϰāĻŦ⧇āύ (āϧāĻžāĻĒ āĻāĻŦāĻ‚ āĻ•āĻŋ āĻŽāύāĻŋāϟāϰ āĻ•āϰāĻŦ⧇āύ)

āĻāϰāĻĒāϰ, āĻĒā§āϰāϤāĻŋāϟāĻŋ āĻāύāĻ­āĻžāϝāĻŧāϰāύāĻŽā§‡āĻ¨ā§āĻŸā§‡āϰ āϜāĻ¨ā§āϝ āĻāĻ•āϟāĻŋ āĻ¸ā§āĻŸā§‹āϰ⧇āϜ āĻĒā§āϝāĻžāϟāĻžāĻ°ā§āύ āĻŦāĻžāϛ⧁āύ āĻāĻŦāĻ‚ āϏ⧇āϟāĻŋ āĻŽā§‡āύ⧇ āϚāϞ⧁āύāĨ¤ āϏāĻ™ā§āĻ—āϤāĻŋ āϕ⧇āϝāĻŧāĻžāϰāĻĢ⧁āϞ āĻ•ā§ŒāĻļāϞ⧇āϰ āĻšā§‡āϝāĻŧ⧇ āĻŦ⧇āĻļāĻŋ āĻ•āĻžāĻœā§‡ āϞāĻžāϗ⧇āĨ¤ āωāĻĻāĻžāĻšāϰāĻŖ: āĻĄā§‡āĻ­āϰāĻž āϞ⧋āĻ•āĻžāϞ āϏāĻŋāĻ•ā§āϰ⧇āϟ āĻ¸ā§āĻŸā§‹āϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇, āĻ¸ā§āĻŸā§‡āϜāĻŋāĻ‚ āĻŽā§āϝāĻžāύ⧇āϜāĻĄ āϏāĻŋāĻ•ā§āϰ⧇āϟāϏ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āϏ⧀āĻŽāĻŋāϤ āĻ…ā§āϝāĻžāĻ•ā§āϏ⧇āϏāϏāĻš, āĻāĻŦāĻ‚ āĻĒā§āϰ⧋āĻĄāĻžāĻ•āĻļāύ āĻāĻ•āχ āĻŽā§āϝāĻžāύ⧇āϜāĻĄ āϏāĻŋāĻ•ā§āϰ⧇āϟāϏ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āφāϰāĻ“ āĻ•āĻĄāĻŧāĻž āĻ…āĻĄāĻŋāϟ āϏāĻšāĨ¤

āϰ⧋āĻŸā§‡āĻļāύ⧇āϰ āϏāĻŽāϝāĻŧāϏ⧂āĻšā§€ āĻāĻŦāĻ‚ āĻāĻ•āϟāĻŋ āϛ⧋āϟ āχāύāϏāĻŋāĻĄā§‡āĻ¨ā§āϟ āĻĒā§āĻ˛ā§āϝāĻžāύ āϝ⧋āĻ— āĻ•āϰ⧁āύ āϝāĻž āĻŽāĻžāύ⧁āώ āĻŦāĻžāĻ¸ā§āϤāĻŦ⧇ āĻĢāϞ⧋ āĻ•āϰāĻŦ⧇:

  • āωāĻšā§āϚ-āĻā§āρāĻ•āĻŋāĻĒā§‚āĻ°ā§āĻŖ āϕ⧀āϗ⧁āϞ⧋ āĻ•ā§āϝāĻžāϞ⧇āĻ¨ā§āĻĄāĻžāϰ⧇ āϰ⧋āĻŸā§‡āϟ āĻ•āϰ⧁āύ (āĻāĻŦāĻ‚ āĻ¸ā§āϟāĻžāĻĢ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ⧇āϰ āĻĒāϰ⧇ āĻ…āĻŦāĻŋāϞāĻŽā§āĻŦ⧇)āĨ¤
  • āϞāĻŋāĻ• āϧāϰ⧇ āύāĻŋāύ: āϰāĻŋāĻ­ā§‹āĻ•, āϰāĻŋāĻĒā§āϞ⧇āϏ, āĻāĻŦāĻ‚ āύāĻŋāĻļā§āϚāĻŋāϤ āĻ•āϰ⧁āύ āĻŸā§āϰāĻžāĻĢāĻŋāĻ• āĻĒ⧁āύāϰ⧁āĻĻā§āϧāĻžāϰ āĻ•āϰ⧇āĨ¤
  • āϕ⧇ āĻ•āĻ–āύ āϕ⧀ āϰ⧋āĻŸā§‡āϟ āĻ•āϰ⧇āϛ⧇ āϤāĻž āϞāĻ— āĻ•āϰ⧁āύāĨ¤
  • āĻŦā§āϞāĻžāĻ¸ā§āϟ āϰ⧇āĻĄāĻŋāϝāĻŧāĻžāϏ āĻšā§‡āĻ• āĻ āĻŋāĻ• āĻ•āϰ⧁āύ (āĻĒ⧇āĻŽā§‡āĻ¨ā§āϟ, āχāĻŽā§‡āχāϞ āϏ⧇āĻ¨ā§āĻĄāĻŋāĻ‚, āĻ“āϝāĻŧ⧇āĻŦāĻšā§āĻ•)āĨ¤

āφāĻĒāύāĻŋ āϝāĻĻāĻŋ AppMaster (appmaster.io) āĻĻāĻŋāϝāĻŧ⧇ āĻŦāĻžāύāĻžāύ, āĻĒā§āϰāĻžāχāϭ⧇āϟ āϕ⧀āϗ⧁āϞ⧋ āϏāĻžāĻ°ā§āĻ­āĻžāϰ-āϏāĻžāχāĻĄ āĻ•āύāĻĢāĻŋāϗ⧇ āϰāĻžāϖ⧁āύ āĻāĻŦāĻ‚ āĻāύāĻ­āĻžāϝāĻŧāϰāύāĻŽā§‡āĻ¨ā§āϟ āĻ…āύ⧁āϝāĻžāϝāĻŧā§€ āĻĄāĻŋāĻĒā§āϞāϝāĻŧ āĻ•āϰ⧁āύ āϝāĻžāϤ⧇ āĻ“āϝāĻŧ⧇āĻŦ āĻ“ āĻŽā§‹āĻŦāĻžāχāϞ āĻŦāĻŋāĻ˛ā§āĻĄāϗ⧁āϞāĻŋāϤ⧇ āĻ—ā§‹āĻĒāύ āĻāĻŽāĻŦ⧇āĻĄ āύāĻž āĻšāϝāĻŧāĨ¤ āϤāĻžāϰāĻĒāϰ āĻāĻ•āĻŦāĻžāϰ āĻ¸ā§āĻŸā§‡āϜāĻŋāĻ‚ āĻĻāĻŋāϝāĻŧ⧇ āĻĒ⧁āϰ⧋ āĻĒā§āϰāĻ•ā§āϰāĻŋāϝāĻŧāĻž āĻĒāϰ⧀āĻ•ā§āώāĻž āĻ•āϰ⧁āύ: āĻāĻ•āϟāĻŋ āϕ⧀ āϰ⧋āĻŸā§‡āϟ āĻ•āϰ⧁āύ āĻāĻ¨ā§āĻĄ-āϟ⧁-āĻāĻ¨ā§āĻĄ (āĻ¸ā§āĻŸā§‹āϰ āφāĻĒāĻĄā§‡āϟ, āϰāĻŋāĻĄāĻŋāĻĒā§āϞāϝāĻŧ, āĻ­ā§āϝāĻžāϰāĻŋāĻĢāĻžāϝāĻŧ, āĻĒ⧁āϰāĻžāύ⧋ āϕ⧀ āϰāĻŋāϟāĻžāϝāĻŧāĻžāϰ)āĨ¤ āĻāĻ•āĻŦāĻžāϰ āĻĒā§āϰāĻŽāĻžāĻŖāĻŋāϤ āĻšāϞ⧇, āĻĒāϰ⧇āϰ āϏāĻŋāĻ•ā§āϰ⧇āĻŸā§‡ āĻāĻ•āχ āĻĒā§āϰāĻ•ā§āϰāĻŋāϝāĻŧāĻž āĻĒ⧁āύāϰāĻžāĻŦ⧃āĻ¤ā§āϤāĻŋ āĻ•āϰ⧁āύāĨ¤

āĻĒā§āϰāĻļā§āύ⧋āĻ¤ā§āϤāϰ

What’s the difference between a secret and normal config?

A secret is any value that proves identity or grants access, like API keys, database passwords, SMTP logins, and webhook signing secrets. Config is a value that can be public without harm, like timeouts, feature flag names, or a public site base URL.

If a value would cause damage when copied from a screenshot or a repo, treat it as a secret.

Why do dev, staging, and prod need different secrets?

Use separate secrets to keep the blast radius small. If a dev laptop, test server, or staging app leaks a key, you don’t want that key to also unlock production.

Separate environments also let you use safer permissions in dev and staging, and stricter, auditable access in production.

How do I stop secrets from leaking into builds?

Assume anything compiled, bundled, exported, or uploaded can be copied and inspected later. Keep secrets out of source code and out of build-time variables, and inject them at runtime through environment variables or a secret manager.

If you can swap a secret without rebuilding the app, you’re usually on the safer path.

Is using a local .env file okay, or is it always risky?

A local .env file is fine for personal development if it never enters version control and never gets baked into images or artifacts. Put it in ignore rules, and avoid sharing it through chat, tickets, or zip files.

For staging and production, prefer protected environment settings or a secret manager so you don’t rely on files traveling around.

What secrets should never be in a web or mobile app?

Don’t put private keys, SMTP passwords, database credentials, or webhook signing secrets in any client app. If the code runs on a user device or in a browser, assume attackers can extract values from it.

Instead, route sensitive actions through your backend so the secret stays server-side and the client only sends a request.

How can I make secret rotation painless?

Design rotation to be a configuration change, not a code change. Store secrets outside the codebase, redeploy services to pick up new values, and keep a clear owner and reminder cadence for each key.

When possible, allow a short overlap where both old and new secrets work, then retire the old one after traffic confirms the change.

How should I verify webhook requests safely?

Verify every webhook request on the server using a secret that never leaves the backend. Compute the expected signature from the raw request body exactly as received and compare it safely before you parse and process the event.

Use different webhook endpoints and secrets per environment so test events can’t trigger production actions.

What’s the safest approach to logging around secrets?

Avoid printing secrets, full headers, or full payloads into logs, build output, or crash reports. If you need troubleshooting, log metadata like event IDs, status codes, and masked values, not credentials.

Treat any pasted log in a ticket or chat as potentially public and redact before sharing.

How do I keep staging realistic without risking production?

Staging should mimic production behavior but remain isolated. Use separate vendor accounts or projects where you can, separate SMTP credentials, separate payment keys, and separate webhook secrets.

Add a guardrail so staging cannot read production secret stores or databases, even if someone misconfigures a deployment.

How should I handle secrets when building with AppMaster?

In AppMaster, keep sensitive values in environment-specific runtime settings for each deployment target, not in UI screens or client-side configuration. That helps ensure generated web and mobile builds carry only public settings, while secrets stay on the server.

A good practice is to keep the same variable names across dev, staging, and prod and only change the values per environment.

āĻļ⧁āϰ⧁ āĻ•āϰāĻž āϏāĻšāϜ
āĻ•āĻŋāϛ⧁ āφāĻļā§āϚāĻ°ā§āϝāϜāύāĻ•āϤ⧈āϰāĻŋ āĻ•āϰ⧁āύ

āĻŦāĻŋāύāĻžāĻŽā§‚āĻ˛ā§āϝ⧇āϰ āĻĒāϰāĻŋāĻ•āĻ˛ā§āĻĒāύāĻž āϏāĻš āĻ…ā§āϝāĻžāĻĒāĻŽāĻžāĻ¸ā§āϟāĻžāϰ⧇āϰ āϏāĻžāĻĨ⧇ āĻĒāϰ⧀āĻ•ā§āώāĻž āĻ•āϰ⧁āύāĨ¤
āφāĻĒāύāĻŋ āϝāĻ–āύ āĻĒā§āϰāĻ¸ā§āϤ⧁āϤ āĻšāĻŦ⧇āύ āϤāĻ–āύ āφāĻĒāύāĻŋ āϏāĻ āĻŋāĻ• āϏāĻĻāĻ¸ā§āϝāϤāĻž āĻŦ⧇āϛ⧇ āύāĻŋāϤ⧇ āĻĒāĻžāϰ⧇āύ⧎

āĻāĻŦāĻžāϰ āĻļ⧁āϰ⧁ āĻ•āϰāĻž āϝāĻžāĻ•
āĻĄā§‡āĻ­, āĻ¸ā§āĻŸā§‡āϜāĻŋāĻ‚, āĻĒā§āϰ⧋āĻĄ-āĻāϰ āϜāĻ¨ā§āϝ āĻ—ā§‹āĻĒāύ āĻ“ āĻ•āύāĻĢāĻŋāĻ—āĻžāϰ⧇āĻļāύ āĻŽā§āϝāĻžāύ⧇āϜāĻŽā§‡āĻ¨ā§āϟ | AppMaster