diff --git a/packages/backend/src/server/api/common/inject-featured.ts b/packages/backend/src/server/api/common/inject-featured.ts
deleted file mode 100644
index d59bec33ab..0000000000
--- a/packages/backend/src/server/api/common/inject-featured.ts
+++ /dev/null
@@ -1,53 +0,0 @@
-import rndstr from 'rndstr';
-import type { Note } from '@/models/entities/Note.js';
-import type { User } from '@/models/entities/User.js';
-
-// TODO: リアクション、Renote、返信などをしたノートは除外する
-
-export async function injectFeatured(timeline: Note[], user?: User | null) {
-	if (timeline.length < 5) return;
-
-	if (user) {
-		const profile = await UserProfiles.findOneByOrFail({ userId: user.id });
-		if (!profile.injectFeaturedNote) return;
-	}
-
-	const max = 30;
-	const day = 1000 * 60 * 60 * 24 * 3; // 3日前まで
-
-	const query = Notes.createQueryBuilder('note')
-		.addSelect('note.score')
-		.where('note.userHost IS NULL')
-		.andWhere('note.score > 0')
-		.andWhere('note.createdAt > :date', { date: new Date(Date.now() - day) })
-		.andWhere('note.visibility = \'public\'')
-		.innerJoinAndSelect('note.user', 'user');
-
-	if (user) {
-		query.andWhere('note.userId != :userId', { userId: user.id });
-
-		generateMutedUserQuery(query, user);
-		generateBlockedUserQuery(query, user);
-
-		const reactionQuery = NoteReactions.createQueryBuilder('reaction')
-			.select('reaction.noteId')
-			.where('reaction.userId = :userId', { userId: user.id });
-
-		query.andWhere(`note.id NOT IN (${ reactionQuery.getQuery() })`);
-	}
-
-	const notes = await query
-		.orderBy('note.score', 'DESC')
-		.take(max)
-		.getMany();
-
-	if (notes.length === 0) return;
-
-	// Pick random one
-	const featured = notes[Math.floor(Math.random() * notes.length)];
-
-	(featured as any)._featuredId_ = rndstr('a-z0-9', 8);
-
-	// Inject featured
-	timeline.splice(3, 0, featured);
-}
diff --git a/packages/backend/src/server/api/common/inject-promo.ts b/packages/backend/src/server/api/common/inject-promo.ts
deleted file mode 100644
index fe02897509..0000000000
--- a/packages/backend/src/server/api/common/inject-promo.ts
+++ /dev/null
@@ -1,33 +0,0 @@
-import rndstr from 'rndstr';
-import type { Note } from '@/models/entities/Note.js';
-import type { User } from '@/models/entities/User.js';
-
-export async function injectPromo(timeline: Note[], user?: User | null) {
-	if (timeline.length < 5) return;
-
-	// TODO: readやexpireフィルタはクエリ側でやる
-
-	const reads = user ? await PromoReads.findBy({
-		userId: user.id,
-	}) : [];
-
-	let promos = await PromoNotes.find();
-
-	promos = promos.filter(n => n.expiresAt.getTime() > Date.now());
-	promos = promos.filter(n => !reads.map(r => r.noteId).includes(n.noteId));
-
-	if (promos.length === 0) return;
-
-	// Pick random promo
-	const promo = promos[Math.floor(Math.random() * promos.length)];
-
-	const note = await Notes.findOneByOrFail({ id: promo.noteId });
-
-	// Join
-	note.user = await Users.findOneByOrFail({ id: note.userId });
-
-	(note as any)._prId_ = rndstr('a-z0-9', 8);
-
-	// Inject promo
-	timeline.splice(3, 0, note);
-}