Partir des utilisateurs et des signaux produit
Une fonctionnalité de production répond à un besoin et doit permettre de comprendre si elle est utile. Les analytics apportent cette couche de mesure : repérer les activités pertinentes et s’en servir pour éclairer les décisions produit, plutôt que de collecter des chiffres pour eux-mêmes.
Intégrer des services dans une expérience cohérente
Les API d’IA et Stripe apportent des capacités externes différentes : l’une peut fournir un comportement fondé sur un modèle, l’autre intervient dans les paiements. Dans les deux cas, l’intégration doit avoir une place claire dans le produit, un comportement prévisible et une configuration traitée avec soin.
Comprendre ce qui fait fonctionner l’application
Une fonctionnalité ne s’arrête pas lorsqu’elle fonctionne sur l’ordinateur d’un développeur. Les notions de VPS présentent l’environnement serveur qui peut héberger une application en ligne et son contexte d’exploitation. Cette étape relie l’intention produit, les services tiers et la réflexion sur le déploiement.
Du concept au code qui fonctionne
Ces extraits montrent comment les notions de chaque niveau prennent forme dans un projet. Ils servent de points de départ à lire, questionner, adapter et tester — pas de code à copier sans le comprendre.
Garder les identifiants du service côté serveur
La route vérifie la requête avant d’appeler le service d’IA. La clé vient d’une variable d’environnement serveur, les erreurs externes sont converties en réponse maîtrisée et le secret ne part jamais dans le navigateur.
export async function POST(request) {
const { prompt } = await request.json();
if (typeof prompt !== "string" || !prompt.trim()) {
return Response.json({ error: "Prompt is required." }, { status: 400 });
}
const upstream = await fetch(process.env.AI_API_URL, {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.AI_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({ prompt: prompt.trim() }),
});
if (!upstream.ok) {
return Response.json({ error: "The service is unavailable." }, { status: 502 });
}
return Response.json(await upstream.json());
}Rendre l’exécution reproductible
Le Dockerfile installe les dépendances verrouillées, construit dans une étape séparée et exécute en mode production avec un utilisateur non privilégié. En production, ajoutez une vérification de santé, figez l’image de base et injectez les secrets par la configuration du déploiement.
FROM node:22-alpine AS build
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build
FROM node:22-alpine AS runtime
ENV NODE_ENV=production
WORKDIR /app
COPY --from=build /app .
EXPOSE 3000
USER node
CMD ["npm", "start"]Lisez, puis adaptezModifiez une exigence, prévoyez le résultat, puis exécutez le code pour vérifier. En revue, expliquez le compromis choisi et une amélioration que vous apporteriez ensuite.