diff --git a/NIP.md b/NIP.md
index 1dbe7b6b..300653f1 100644
--- a/NIP.md
+++ b/NIP.md
@@ -564,7 +564,6 @@ Community-scoped pledges inherit the community's moderation context. Clients ren
["t", "tree-planting"],
["t", "local-action"],
["image", "https://example.com/cover.jpg"],
- ["start", "1729000000"],
["deadline", "1729604800"],
["alt", "Agora pledge: Plant a tree in your neighborhood"]
]
@@ -584,7 +583,7 @@ Community-scoped pledges inherit the community's moderation context. Clients ren
| `P` | No | Root author hint for community-scoped pledges. Use the community definition author pubkey. |
| `t` | Yes | Discovery and category tags. Canonical write value includes `agora-action`; additional `t` tags are optional hashtags/categories. Read aliases: `pathos-challenge`, `agora-challenge`. |
| `image` | No | Cover image URL. |
-| `start` | No | Unix timestamp when the pledge becomes active. Defaults to `created_at`. |
+| `start` | No | Legacy. Unix timestamp when the pledge becomes active. Defaults to `created_at`. New pledges omit it; the `created_at` is the start. |
| `deadline` | No | Optional Unix timestamp when the pledge expires. Omit for open-ended pledges. |
| `alt` | Yes | NIP-31 human-readable fallback. Convention: `"Agora pledge:
"`. |
diff --git a/src/components/CreateActionDialog.tsx b/src/components/CreateActionDialog.tsx
index 414d8262..2f37d02f 100644
--- a/src/components/CreateActionDialog.tsx
+++ b/src/components/CreateActionDialog.tsx
@@ -19,7 +19,7 @@ import { useToast } from '@/hooks/useToast';
import { useUploadFile } from '@/hooks/useUploadFile';
import { createCountryIdentifier } from '@/lib/countryIdentifiers';
import { countryCodeToFlag, getAllCountries, getGeoDisplayName } from '@/lib/countries';
-import { DEFAULT_ACTION_COVERS, DEFAULT_COVER_IMAGE } from '@/lib/defaultActionCovers';
+import { DEFAULT_COVER_IMAGE } from '@/lib/defaultActionCovers';
import { usdToSats } from '@/lib/bitcoin';
import { cn } from '@/lib/utils';
@@ -35,8 +35,6 @@ interface CreateActionFormState {
description: string;
tagInput: string;
pledgeUsd: string;
- startDate: string;
- startTime: string;
deadline: string;
time: string;
coverImage: string;
@@ -106,10 +104,6 @@ function CreateActionForm({
const { data: btcPrice } = useBtcPrice();
const allCountries = useMemo(() => getAllCountries(), []);
const [countryPickerOpen, setCountryPickerOpen] = useState(false);
- const [selectedDefaultId, setSelectedDefaultId] = useState(() => {
- const match = DEFAULT_ACTION_COVERS.find((c) => c.url === formData.coverImage);
- return match?.id ?? null;
- });
const countryOptions = useMemo(() => {
const options: Array<{ value: string; label: string; flag: string }> = [
@@ -136,7 +130,6 @@ function CreateActionForm({
try {
const [[, url]] = await uploadFile(file);
setFormData({ ...formData, coverImage: url });
- setSelectedDefaultId(null);
} catch (error) {
console.error('Failed to upload cover image:', error);
}
@@ -194,28 +187,6 @@ function CreateActionForm({
-
-
- {DEFAULT_ACTION_COVERS.map((cover) => {
- const isActive = selectedDefaultId === cover.id || formData.coverImage === cover.url;
- return (
-
- );
- })}
-
-
-
-
-
setFormData({ ...formData, startDate: e.target.value })} />
- {formData.startDate &&
setFormData({ ...formData, startTime: e.target.value })} />}
-
- {!formData.startDate && 'Defaults to now if not specified'}
- {formData.startDate && !formData.startTime && ' • Starts at midnight'}
-
-
-
setFormData({ ...formData, deadline: e.target.value })} />
@@ -288,11 +249,11 @@ function CreateActionForm({
- {(formData.startDate || formData.deadline) && (
+ {formData.deadline && (
setFormData({ ...formData, timezone })} />
- Start and deadline times will be interpreted in this timezone.
+ Deadline time will be interpreted in this timezone.
)}
@@ -322,8 +283,6 @@ export function CreateActionDialog({ countryCode, communityATag, open, onOpenCha
description: '',
tagInput: '',
pledgeUsd: '',
- startDate: '',
- startTime: '',
deadline: '',
time: '',
coverImage: DEFAULT_COVER_IMAGE,
@@ -357,11 +316,6 @@ export function CreateActionDialog({ countryCode, communityATag, open, onOpenCha
}
if (formData.coverImage) tags.push(['image', formData.coverImage]);
- if (formData.startDate) {
- const [year, month, day] = formData.startDate.split('-').map(Number);
- const [hours, minutes] = formData.startTime ? formData.startTime.split(':').map(Number) : [0, 0];
- tags.push(['start', String(unixSecondsInTimezone(year, month, day, hours, minutes, formData.timezone))]);
- }
if (formData.deadline) {
const [year, month, day] = formData.deadline.split('-').map(Number);
const [hours, minutes] = formData.time ? formData.time.split(':').map(Number) : [23, 59];
@@ -388,7 +342,7 @@ export function CreateActionDialog({ countryCode, communityATag, open, onOpenCha
setFormData({
title: '', description: '', tagInput: '', pledgeUsd: '',
- startDate: '', startTime: '', deadline: '', time: '',
+ deadline: '', time: '',
coverImage: DEFAULT_COVER_IMAGE,
selectedCountry: countryCode || '',
timezone: browserTimezone,
diff --git a/src/pages/CreateActionPage.tsx b/src/pages/CreateActionPage.tsx
index ce0ef4f1..17514c61 100644
--- a/src/pages/CreateActionPage.tsx
+++ b/src/pages/CreateActionPage.tsx
@@ -34,7 +34,6 @@ import { COMMUNITY_DEFINITION_KIND } from '@/lib/communityUtils';
import { COUNTRIES, searchCountries, type CountryEntry } from '@/lib/countries';
import { createCountryIdentifier } from '@/lib/countryIdentifiers';
import { getTodayDateInput } from '@/lib/dateInput';
-import { DEFAULT_ACTION_COVERS } from '@/lib/defaultActionCovers';
import { sanitizeUrl } from '@/lib/sanitizeUrl';
import { cn } from '@/lib/utils';
@@ -162,8 +161,6 @@ export function CreateActionPage() {
const [description, setDescription] = useState('');
const [tagInput, setTagInput] = useState('');
const [pledgeUsd, setPledgeUsd] = useState('');
- const [startDate, setStartDate] = useState('');
- const [startTime, setStartTime] = useState('');
const [deadline, setDeadline] = useState('');
const [deadlineTime, setDeadlineTime] = useState('');
const [coverImage, setCoverImage] = useState('');
@@ -256,17 +253,6 @@ export function CreateActionPage() {
tags.push(['image', sanitizedImage]);
}
- if (startDate) {
- const [year, month, day] = startDate.split('-').map(Number);
- const [hours, minutes] = startTime
- ? startTime.split(':').map(Number)
- : [0, 0];
- tags.push([
- 'start',
- String(unixSecondsInTimezone(year, month, day, hours, minutes, timezone)),
- ]);
- }
-
if (deadline) {
if (deadline < minDeadline) {
throw new Error('Deadline cannot be in the past.');
@@ -398,7 +384,7 @@ export function CreateActionPage() {
{/* Tags */}
-
+
{/* Description */}
-
+
- {/* Start date */}
-
- setStartDate(e.target.value)}
- />
- {startDate && (
- setStartTime(e.target.value)}
- />
- )}
-
- {!startDate && 'Defaults to now if not specified'}
- {startDate && !startTime && 'Starts at midnight'}
-
-
-
{/* Deadline */}
- {(startDate || deadline) && (
+ {deadline && (