···8889 // Validate successor DID format if provided
90 if successor != "" {
91- if !atproto.IsDID(successor) || !strings.HasPrefix(successor, "did:web:") {
92- setFlash(w, r, "error", "Successor must be a valid did:web: DID (e.g., did:web:hold.example.com)")
93 http.Redirect(w, r, "/admin#settings", http.StatusFound)
94 return
95 }
···8889 // Validate successor DID format if provided
90 if successor != "" {
91+ if !atproto.IsDID(successor) || !(strings.HasPrefix(successor, "did:web:") || strings.HasPrefix(successor, "did:plc:")) {
92+ setFlash(w, r, "error", "Successor must be a valid did:web: or did:plc: DID")
93 http.Redirect(w, r, "/admin#settings", http.StatusFound)
94 return
95 }
···51 <small class="text-base-content/60">DID of the successor hold. When set, the appview redirects all requests to the successor.</small>
52 </span>
53 <input type="text" name="successor" class="input input-bordered w-full font-mono text-sm"
54- placeholder="did:web:hold.example.com"
55 value="{{.Settings.Successor}}">
56 </label>
57 </div>
···51 <small class="text-base-content/60">DID of the successor hold. When set, the appview redirects all requests to the successor.</small>
52 </span>
53 <input type="text" name="successor" class="input input-bordered w-full font-mono text-sm"
54+ placeholder="did:web:hold.example.com or did:plc:..."
55 value="{{.Settings.Successor}}">
56 </label>
57 </div>