Almcoe Smart Goals

Verifying your session…

Team Member Information

Profile pulled from Almcoe directory

S.M.A.R.T. Framework Reference

OBJECTIVE: Goal setting is your chance to focus on your performance, shape your year, and help you and your manager identify meaningful goals and expectations. You and your manager will align on 3-5 MBOs using the SMART goal framework below.
ObjectiveDescription
SpecificClearly state your goal — who, what, when, where, and why
MeasurableEnsure goal is measurable; tie to metrics and quantifiable targets when possible
AchievableEnsure goal is achievable and realistic given available resources and constraints
RelevantGoal should be relevant to your career/job and tied to the overall business strategy
Time-boundSet a specific deadline or timeframe for completion

S.M.A.R.T. Goals — Draft 3 to 5 MBOs

Define your goals using the SMART framework. Track progress throughout the performance year.

Performance Updates

Log progress notes throughout the year
DatePerformance Update

Your Signature

By signing this document, you acknowledge your MBOs were discussed with your immediate manager. Additionally, your 2026 overall performance will be measured against these (MBOs) via SMART goal framework.

Team Member Signature
✍️ Sign here with mouse or touch

Team Goal Review

Manager Workflow: Team members appear below once they submit their goals for review. Open a record, review their goals, draw your signature, and click Sign & Approve to complete the process. Both parties can then download the final signed PDF.

Analytics Dashboard

Goals by Department

DepartmentUsersTotal Goals✅ Done🔄 In Progress⭕ Not Started% CompleteProgress

All Team Members

NameEmailDepartmentGoalsDoneIn Progress% DoneStatusLast SavedActions

Admin Panel

Branding & Document Settings

What each field controls

Company / Brand Name — appears in nav bar and PDF footer
Browser & Nav Title — sets the browser tab title and top-of-page name
PDF Header Title — large centered heading on every PDF
PDF Sub-Header / Year Label — e.g. "GOAL SETTING: 2026" shown under PDF title and used in email reminders
Primary Color — accent color throughout the app
Footer Notice — signature disclaimer text on goals form and PDF

📧 Email Configuration

All email is sent through a Supabase Edge Function — this keeps API keys server-side and avoids browser CORS restrictions. Choose Resend or Brevo, deploy the function once, and you're set.
1. Sign up at resend.comAPI Keys → Create API Key (name it anything) → copy the re_xxx key.
2. Add & verify your sending domain under Domains.
3. Run in your terminal:
supabase secrets set RESEND_API_KEY=re_your_key_here
supabase secrets set FROM_EMAIL=hr@almcoe.online
supabase secrets set FROM_NAME="Almcoe HR Team"
Deploy Edge Function (one time)
supabase functions new send-reminder
# paste code below into supabase/functions/send-reminder/index.ts
supabase functions deploy send-reminder
📋 Edge Function source code (click to expand & copy)
// supabase/functions/send-reminder/index.ts
import { serve } from "https://deno.land/std@0.168.0/http/server.ts";

const CORS = {
  "Access-Control-Allow-Origin": "*",
  "Access-Control-Allow-Headers": "authorization, x-client-info, apikey, content-type",
};

serve(async (req) => {
  if (req.method === "OPTIONS") return new Response("ok", { headers: CORS });
  try {
    const { to, toName, subject, body, provider } = await req.json();
    const fromEmail = Deno.env.get("FROM_EMAIL") ?? "noreply@example.com";
    const fromName  = Deno.env.get("FROM_NAME")  ?? "HR Team";
    let res;

    if (provider === "brevo") {
      const apiKey = Deno.env.get("BREVO_API_KEY") ?? "";
      res = await fetch("https://api.brevo.com/v3/smtp/email", {
        method: "POST",
        headers: { "api-key": apiKey, "Content-Type": "application/json" },
        body: JSON.stringify({
          sender: { name: fromName, email: fromEmail },
          to: [{ email: to, name: toName }],
          replyTo: { email: fromEmail },
          subject,
          textContent: body,
        }),
      });
    } else {
      const apiKey = Deno.env.get("RESEND_API_KEY") ?? "";
      res = await fetch("https://api.resend.com/emails", {
        method: "POST",
        headers: { Authorization: `Bearer ${apiKey}`, "Content-Type": "application/json" },
        body: JSON.stringify({
          from: `${fromName} <${fromEmail}>`,
          to:   [`${toName} <${to}>`],
          reply_to: fromEmail,
          subject,
          text: body,
        }),
      });
    }

    const data = await res.json();
    return new Response(JSON.stringify(data), {
      headers: { ...CORS, "Content-Type": "application/json" },
      status: res.ok ? 200 : 400,
    });
  } catch (e) {
    return new Response(JSON.stringify({ error: String(e) }), {
      headers: { ...CORS, "Content-Type": "application/json" },
      status: 500,
    });
  }
});

✏️ Email Template

Variables: {{to_name}} name  ·  {{goal_list}} upcoming goals  ·  {{days_notice}} window  ·  {{company_name}} brand  ·  {{year_label}} year

📤 Send Reminders

Scans all users for goals due within the configured window. Skips fully signed records.

All Users

NameEmailRoleEmp IDGoalsStatusLast SavedActions

📅 Performance Year Management

Current Year:

Use this section to start a new performance year. Starting a new year will:
• Update the document header to the new year
• Export a full CSV backup of all current goal records
• Clear all goal records so every team member starts fresh
• Signatures, progress, and updates from the old year are archived in the CSV
⚠️ This action cannot be undone. A CSV will be automatically downloaded before records are cleared. Make sure to save it.
📋 One-time Supabase setup for historical archive: Run this SQL once in your Supabase SQL Editor to enable Supabase-level archiving:
CREATE TABLE public.smart_goals_archive ( id uuid primary key default gen_random_uuid(), original_user_id uuid, performance_year text not null, archived_at timestamptz default now(), profile_snapshot jsonb, record_snapshot jsonb not null ); ALTER TABLE public.smart_goals_archive ENABLE ROW LEVEL SECURITY; CREATE POLICY "admin_all" ON public.smart_goals_archive FOR ALL TO authenticated USING (EXISTS (SELECT 1 FROM public.profiles WHERE id = auth.uid() AND (role = 'admin' OR is_admin = true)));

🗑️ Delete a Single User's Goals

Find a user by email and delete their goals record. Useful for corrections or re-starts.

Performance Management Cycle
GOAL SETTING: 2026
Team Member Name
Team Member Email
Department
Team Member Company
Employee ID
OBJECTIVE: Goal setting is your chance to focus on your performance, shape your year, and help you and your manager identify meaningful goals and expectations. You and your manager will align on 3-5 MBOs using the SMART goal framework below.
ObjectiveDescription
SpecificClearly state your goal
MeasurableEnsure goal is measurable
AchievableEnsure goal is achievable, set realistic targets
RelevantGoal should be relevant to your career/job
Time-boundSet a deadline for completion
S.M.A.R.T. Goals
Draft 3-5 MBOs for the performance year.

Performance Updates
Progress notes logged throughout the year.
DatePerformance Update
Team Member Name (Printed)
Date
Team Member Signature
Manager Name (Printed)
Date
Manager Signature

✏️ Edit Goals —

As an admin you can edit any field. Changes save immediately to Supabase when you click Save Changes.

Performance Updates

DateUpdate Note

📄 Upload PDF Goals

Upload a Smart Goals PDF to extract goals automatically.

📁

Drag & drop PDFs here, or click to browse

Pattern-matches the Smart Care / standard SMART Goals format. No API key needed.

Processing…