diff --git a/CHANGELOG.md b/CHANGELOG.md
index eb3871f8..6ff85a31 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -14,10 +14,24 @@ This project uses a user-facing changelog format.
### Added
+- Ylläpitäjä voi avata ajokoetapahtuman omalle sivulleen tarkastelua ja nykyisiä muokkaustoimintoja varten.
+- Ylläpitäjä voi luoda ajokoetapahtuman perustietoineen ja avata sen omalle sivulleen ennen koetulosten lisäämistä.
+- Ylläpitäjä voi poistaa tyhjän ajokoetapahtuman sen omalta sivulta.
+- Ylläpitäjä voi lisätä ajokoetapahtumaan koirakohtaisia tuloksia yksi kerrallaan ja jatkaa seuraavaan tulokseen tai palata tapahtuman sivulle.
+
### Changed
+- Ajokoetuloksen lisäyslomakkeen avattavat kortit noudattavat virallisen pöytäkirjan aihealueita ilman pöytäkirjan taulukkoasettelun kopiointia. Lisätietoja muokataan pöytäkirjan mukaisissa yksittäin avattavissa ryhmissä myös mobiilissa.
+- Viimeisen koetuloksen poistaminen säilyttää ajokoetapahtuman tyhjänä, kunnes ylläpitäjä poistaa tapahtuman erikseen.
+- Uuden ajokoetapahtuman luomisen jälkeen siirrytään suoraan lisäämään tapahtuman ensimmäistä koetulosta.
+- Ajokoetuloksen lisäyslomake näyttää 1.8.2023 alkaen käytössä olevan sääntökauden mukaiset kentät. Vanhemmilla tai tunnistamattomilla sääntökausilla kaikki yhteensopivuuskentät säilyvät näkyvissä varoituksen kanssa.
+
### Fixed
+- Ajokoetuloksen lisätietorivit tallennetaan kelvollisessa kokonaislukujärjestyksessä, ja hylätty lisätietorivi näytetään aiempaa tarkemmin.
+- Ajokoetuloksen lisäyslomakkeen selaimen Takaisin-toiminto ei enää yritä perua navigointia epäluotettavalla edestakaisella sivuhistorian käsittelyllä.
+- Ylisuuria kokonaislukuarvoja ei enää tallenneta tyhjinä ajokoetuloksen luonnissa tai muokkauksessa.
+
### Removed
## [0.19.0] - 2026-07-20
diff --git a/apps/web/app/(admin)/admin/trials/[trialEventId]/__tests__/page.test.tsx b/apps/web/app/(admin)/admin/trials/[trialEventId]/__tests__/page.test.tsx
new file mode 100644
index 00000000..195da362
--- /dev/null
+++ b/apps/web/app/(admin)/admin/trials/[trialEventId]/__tests__/page.test.tsx
@@ -0,0 +1,22 @@
+import React from "react";
+import { renderToStaticMarkup } from "react-dom/server";
+import { describe, expect, it, vi } from "vitest";
+import AdminTrialEventWorkspacePage from "../page";
+
+vi.mock("@/components/admin/trials", () => ({
+ AdminTrialEventWorkspacePageClient: ({
+ trialEventId,
+ }: {
+ trialEventId: string;
+ }) => React.createElement("div", null, trialEventId),
+}));
+
+describe("AdminTrialEventWorkspacePage", () => {
+ it("forwards the route trial event id", async () => {
+ const page = await AdminTrialEventWorkspacePage({
+ params: Promise.resolve({ trialEventId: "event-1" }),
+ });
+
+ expect(renderToStaticMarkup(page)).toContain("event-1");
+ });
+});
diff --git a/apps/web/app/(admin)/admin/trials/[trialEventId]/page.tsx b/apps/web/app/(admin)/admin/trials/[trialEventId]/page.tsx
new file mode 100644
index 00000000..a7c7d62b
--- /dev/null
+++ b/apps/web/app/(admin)/admin/trials/[trialEventId]/page.tsx
@@ -0,0 +1,11 @@
+import { AdminTrialEventWorkspacePageClient } from "@/components/admin/trials";
+
+export default async function AdminTrialEventWorkspacePage({
+ params,
+}: {
+ params: Promise<{ trialEventId: string }>;
+}) {
+ const { trialEventId } = await params;
+
+ return {t("admin.trials.manage.resultCreate.loading")} {message}
+ {formatDateForFinland(event.eventDate)} • {event.eventPlace} • SKL{" "}
+ {event.sklKoeId}
+
+ {t(fieldSet.rulePeriodMessageKey)}
+
+ {t("admin.trials.manage.resultCreate.ruleWindowWarning")}
+
+ {errorText}
+
+ {t("admin.trials.manage.create.description")}
+ {errorText}
+ {t(
+ errorCode === "TRIAL_EVENT_NOT_FOUND"
+ ? "admin.trials.manage.workspace.notFound"
+ : "admin.trials.manage.workspace.error",
+ )}
+
+ {t("admin.trials.manage.resultCreate.title")}
+
+
+ {t("admin.trials.manage.create.title")}
+
+
+ {t("admin.trials.manage.workspace.title")}
+
+
+ {eventQuery.isError ? (
+
- {t("admin.trials.description")} -
++ {t("admin.trials.description")} +
+