CtrlK
BlogDocsLog inGet started
Tessl Logo

bapfernandez/test-publish

A realistic Express app with a multilingual greeting API and frontend, powered by a hello-world skill

30

Does it follow best practices?

Validation for skill structure

Overview
Skills
Evals
Files

index.jsserver/

const express = require("express");
const path = require("path");
const config = require("../skills/hello-world/config.json");

const app = express();
const PORT = process.env.PORT || 3000;

app.use(express.static(path.join(__dirname, "../client")));

function getTimeOfDay() {
  const hour = new Date().getHours();
  if (hour < 12) return "morning";
  if (hour < 18) return "afternoon";
  return "evening";
}

const timeGreetings = {
  en: { morning: "Good morning", afternoon: "Good afternoon", evening: "Good evening" },
  fr: { morning: "Bonjour", afternoon: "Bon après-midi", evening: "Bonsoir" },
  es: { morning: "Buenos días", afternoon: "Buenas tardes", evening: "Buenas noches" },
  de: { morning: "Guten Morgen", afternoon: "Guten Tag", evening: "Guten Abend" },
  ja: { morning: "おはようございます", afternoon: "こんにちは", evening: "こんばんは" },
};

app.get("/api/greet", (req, res) => {
  const lang = req.query.lang || config.default_language;
  const name = req.query.name || "World";

  if (!config.supported_languages.includes(lang)) {
    return res.status(400).json({ error: `Unsupported language: ${lang}` });
  }

  const timeOfDay = getTimeOfDay();
  const greeting = timeGreetings[lang][timeOfDay];

  res.json({ greeting: `${greeting}, ${name}!`, language: lang, timeOfDay });
});

app.listen(PORT, () => {
  console.log(`Greeting server running at http://localhost:${PORT}`);
});

Install with Tessl CLI

npx tessl i bapfernandez/test-publish

server

index.js

tile.json