{"id":11959,"date":"2026-10-10T08:11:01","date_gmt":"2026-10-09T23:11:01","guid":{"rendered":"https:\/\/www.freelifemakers.org\/wordpress\/?p=11959"},"modified":"2026-10-10T16:58:09","modified_gmt":"2026-10-10T07:58:09","slug":"nextjs-sns-server-51","status":"publish","type":"post","link":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/2026\/10\/10\/nextjs-sns-server-51\/","title":{"rendered":"[nextjs]SNS Server-51(myapp61)\u00a0"},"content":{"rendered":"\n<p>\ud83d\udc49\ud83c\udffb myapp61\uc5d0\uc11c\ub294 \uc54c\ub9bc\ud398\uc774\uc9c0\uc5d0\uc11c \ub370\uc774\ud130\uac00 \uc911\ubcf5 \ud45c\uc2dc\ub418\ub294 \ubb38\uc81c\ub97c \uc218\uc815 \ud569\ub2c8\ub2e4.<br>In myapp61, the issue where data was displayed redundantly on the notification page is being fixed.<\/p>\n\n\n\n<p>\ud83d\udc49\ud83c\udffb \ud0c0\uc784\ub77c\uc778\uc5d0\uc11c \ub370\uc774\ud130\uac00 \uc5c6\uc73c\uba74 Home,Local,Federated \ud0ed\uc774 \uc0ac\ub77c\uc9c0\ub294 \ubb38\uc81c\ub97c \uc218\uc815\ud569\ub2c8\ub2e4.<br>Fixes an issue where the Home, Local, and Federated tabs disappear when there is no data in the timeline.<\/p>\n\n\n\n<p>\ud83d\udc49\ud83c\udffb \ub0b4\uac00 \uc791\uc131\ud558\uc9c0 \uc54a\uc740 \uae00\ub3c4 DELETE\ud45c\uc2dc\ub418\ub294 \ubb38\uc81c\ub97c \uc218\uc815\ud569\ub2c8\ub2e4.<br>Fixes an issue where posts I did not write were marked for deletion.<\/p>\n\n\n\n<p>\ud83d\udc49\ud83c\udffb \uc804\uccb4 \ucf54\ub4dc\ub294 \uae43\ud5c8\ube0c\uc5d0\uc11c \ud655\uc778 \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<br>You can find the full code on GitHub.<\/p>\n\n\n\n<p><a href=\"https:\/\/github.com\/gideonslife01\/flm-nextjs\">https:\/\/github.com\/gideonslife01\/flm-nextjs<\/a><\/p>\n\n\n\n<p>\ud83d\udcc1 \uc804\uccb4 \ud504\ub85c\uc81d\ud2b8 \uad6c\uc870 \/ Overall Project Structure<\/p>\n\n\n\n<pre class=\"wp-block-code\" style=\"font-size:14px\"><code>myapp project\/  \n\u251c\u2500\u2500 app\/  (Next.js App Router)\n\u2502   \u251c\u2500\u2500 .well-known\/webfinger\/route.ts  -> webfinger\n\u2502   \u251c\u2500\u2500 hooks\/useCursorPagination.ts    -> Pagination Hook\n\u2502   \u251c\u2500\u2500 api\/follow\/route.ts    -> Follow API(temporary)\n\u2502   \u251c\u2500\u2500 api\/announce\/route.ts  -> Boost(Announcement)\n\u2502   \u251c\u2500\u2500 api\/like\/route.ts.     -> Like API\n\u2502   \u251c\u2500\u2500 api\/posts\/route.ts     -> Writing API(deprecated)\n\u2502   \u251c\u2500\u2500 api\/timeline\/route.ts  -> Timeline API\n\u2502   \u251c\u2500\u2500 api\/followinglist\/route.ts  -> followinglist API\n\u2502   \u251c\u2500\u2500 api\/followerslist\/route.ts  -> followerslist API\n\u2502   \u251c\u2500\u2500 <span style=\"background-color: initial; font-size: inherit; text-align: initial; color: initial;\">api\/v1\/instance<\/span>\/route.ts -> auth\n\u2502   \u251c\u2500\u2500 api\/v1\/apps\/route.ts.    -> auth\n\u2502   \u251c\u2500\u2500 api\/v1\/accounts\/verify_credentials\/route.ts -> auth\n\u2502   \u251c\u2500\u2500 api\/v1\/statuses\/route.ts -> Write Post\n\u2502   \u251c\u2500\u2500 <span style=\"background-color: initial; font-size: inherit; text-align: initial; color: initial;\">api\/v1\/timelines\/_home_back\/route.ts<\/span> -> timeline(Depreacted)\n\u2502   \u251c\u2500\u2500 api\/v1\/media\/route.ts -> Image upload\n\u2502   \u251c\u2500\u2500 api\/v1\/media\/&#91;id]\/route.ts  -> Image Delete \n\u2502   \u251c\u2500\u2500 api\/v1\/instance\/rules\/route.ts -> Feature not implemented.\n\u2502   \u251c\u2500\u2500 api\/v1\/instance\/domain_blocks\/route.ts -> Feature not implemented.\n\u2502   \u251c\u2500\u2500 api\/v1\/filters\/route.ts -> Feature not implemented.\n\u2502   \u251c\u2500\u2500 api\/v1\/lists\/route.ts -> Feature not implemented.\n\u2502   \u251c\u2500\u2500 api\/v1\/announcements\/route.ts -> Feature not implemented.\n\u2502   \u251c\u2500\u2500 api\/v1\/timelines\/_public_back\/route.ts -> Feature not implemented.(Deprecated)\n\u2502   \u251c\u2500\u2500 api\/v1\/timelines\/&#91;type]\/route.ts -> Timeline API\n\u2502   \u251c\u2500\u2500 api\/v1\/statuses\/&#91;id]\/context\/route.ts -> Post Check,Delete\n\u2502   \u251c\u2500\u2500 <span style=\"background-color: initial; font-size: inherit; text-align: initial; color: initial;\">oauth\/authorize\/route.ts<\/span> -> auth\n\u2502   \u251c\u2500\u2500 <span style=\"background-color: initial; font-size: inherit; text-align: initial; color: initial;\">oauth\/token\/route.ts<\/span> -> auth\n\u2502   \u251c\u2500\u2500 <span style=\"background-color: initial; font-size: inherit; text-align: initial; color: initial;\">oauth\/login-and-authorize\/route.ts<\/span> -> Tursky,Pinafore login processing\n\u2502   \u251c\u2500\u2500 oauth\/revoke\/route.ts -> Feature not implemented.\n\u2502   \u251c\u2500\u2500 <span style=\"background-color: initial; font-size: inherit; text-align: initial; color: initial;\">api\/v1\/search\/home\/route.ts<\/span> -> search\n\u2502   \u251c\u2500\u2500 <span style=\"background-color: initial; font-size: inherit; text-align: initial; color: initial;\">api\/v2\/search\/home\/route.ts<\/span> -> search\n\u2502   \u251c\u2500\u2500 api\/v2\/notifications\/policy\/route.ts-> Feature not implemented.\n\u2502   \u251c\u2500\u2500 api\/v1\/accounts\/&#91;id]\/followers\/route.ts -> followers\n\u2502   \u251c\u2500\u2500 api\/v1\/accounts\/&#91;id]\/following\/route.ts -> following\n\u2502   \u251c\u2500\u2500 api\/v1\/statuses\/&#91;id]\/route.ts  -> Post delete(pinafore)\n\u2502   \u251c\u2500\u2500 api\/v1\/statuses\/&#91;id]\/favourite\/route.ts -> favourite(for pinafore)\n\u2502   \u251c\u2500\u2500 api\/v1\/statuses\/&#91;id]\/unfavourite\/route.ts -> unfavourite(for pinafore)\n\u2502   \u251c\u2500\u2500 api\/v1\/statuses\/&#91;id]\/reblog\/route.ts  -> reblog&#91;boost](for pinafore)\n\u2502   \u251c\u2500\u2500 api\/v1\/statuses\/&#91;id]\/unreblog\/route.ts  -> unreblog&#91;unboost](for pinafore)\n\u2502   \u251c\u2500\u2500 api\/auth\/signup\/route.ts        -> Website Signup\n\u2502   \u251c\u2500\u2500 api\/auth\/login\/route.ts         -> Website Login\n\u2502   \u251c\u2500\u2500<strong> <\/strong>api\/auth\/logout\/route.ts        -> Website Logout\n\u2502   \u251c\u2500\u2500<strong> <\/strong>api\/auth\/refresh\/route.ts       -> Refresh Token\n\u2502   \u251c\u2500\u2500<strong> <\/strong>api\/cleanup-orphan\/route.ts     -> post,outbox clean up\n\u2502   \u251c\u2500\u2500<strong> <\/strong>api\/auth\/me\/route.tsx           -> Login Check<strong>\n<\/strong>\u2502   \u251c\u2500\u2500 auth\/signup\/page.tsx            -> Signup UI\n\u2502   \u251c\u2500\u2500 auth\/signup\/page.tsx            -> Login UI        \n\u2502   \u251c\u2500\u2500 users\/&#91;username]\/\n\u2502   \u2502   \u251c\u2500\u2500 statuses\/&#91;id]\/route.ts -> Indivisual Post\n\u2502   \u2502   \u251c\u2500\u2500 route.ts               -> Acotr Information\n\u2502   \u2502   \u251c\u2500\u2500 followers\/route.ts     -> Followers List\n\u2502   \u2502   \u251c\u2500\u2500 following\/route.ts     -> Following List\n\u2502   \u2502   \u251c\u2500\u2500 inbox\/route.ts         -> Inbox\n\u2502   \u2502   \u2514\u2500\u2500 outbox\/route.ts        -> outbox\n\u2502   \u251c\u2500\u2500 usersui\/&#91;username]\/\n\u2502   \u2502   \u251c\u2500\u2500 page.tsx               -> Timeline UI(Server, 404)\n\u2502   \u2502   \u251c\u2500\u2500 ClientPage.tsx.        -> Timeline UI(Client,Call Active Themes)\n\u2502   \u2502   \u2514\u2500\u2500 _components\/themes\/\n\u2502   \u2502       \u251c\u2500\u2500 themeex\/ThemeexTheme.tsx      -> Example Theme\n\u2502   \u2502       \u251c\u2500\u2500 themeex\/FollowersList.tsx     -> Theme Example, FollowersList\n\u2502   \u2502       \u251c\u2500\u2500 themeex\/FollowingList.tsx     -> Theme Example, FollowingList\n\u2502   \u2502       \u251c\u2500\u2500 themeex\/NotificationsList.tsx -> Theme Example, NotificationsList\n\u2502   \u2502       \u251c\u2500\u2500 themeex\/TimelineList.tsx      -> Theme Example, TimelineList\n\u2502   \u2502       \u251c\u2500\u2500 pinafore\/PinaforeTheme.tsx -> Theme 1\n\u2502   \u2502       \u251c\u2500\u2500 pinafore\/FollowersList.tsx -> Theme 1, FollowersList\n\u2502   \u2502       \u251c\u2500\u2500 pinafore\/FollowingList.tsx -> Theme 1, FollowingList\n\u2502   \u2502       \u251c\u2500\u2500 pinafore\/NotificationsList.tsx -> Theme 1, NotificationsList\n\u2502   \u2502       \u251c\u2500\u2500 pinafore\/TimelineList.tsx  -> Theme 1, TimelineList\n\u2502   \u2502       \u251c\u2500\u2500 mastodon\/MastodonTheme.tsx -> Theme 2\n\u2502   \u2502       \u2514\u2500\u2500 minimal\/MinimaltTheme.tsx  -> Theme 3\n\u2502   \u251c\u2500\u2500 layout.tsx, page.tsx, globals.css\n\u2502   \u2514\u2500\u2500 favicon.ico\n\u251c\u2500\u2500 lib\/\n\u2502   \u251c\u2500\u2500 theme.tsx              -> Theme Provider\n\u2502   \u251c\u2500\u2500 watchThemes.ts         -> Check real-time theme changes\n\u2502   \u251c\u2500\u2500 auth.ts                -> Authentication, User Management\n\u2502   \u251c\u2500\u2500 ap.ts                  -> Follow,Undo,Create,Likes,Announce\n\u2502   \u251c\u2500\u2500 visibility.ts          -> Visibility(Public,Unlisted,Private,Direct)\n\u2502   \u2514\u2500\u2500 db.ts                  -> DB connection\n\u251c\u2500\u2500 data\/\n\u2502   \u251c\u2500\u2500 keys\/userIDs\/          -> private.pem, public.pem(New)\n\u2502   \u2514\u2500\u2500 keys\/                  -> private.pem, public.pem(legacy)\n\u251c\u2500\u2500 data.sqlite                -> Database(1\/3)\n\u251c\u2500\u2500 data.sqlite-wal            -> Database(2\/3)\n\u251c\u2500\u2500 data.sqlite-shm            -> Database(3\/3)\n\u251c\u2500\u2500 Caddyfile                  -> https \n\u251c\u2500\u2500 instrumentation.ts         -> Background Server\n\u251c\u2500\u2500 proxy.ts                   -> middleware.ts - >proxy.ts(for Nextjs16)\n\u251c\u2500\u2500 postcss.config.mjs         -> for Nextjs16\n\u2514\u2500\u2500 package.json<\/code><\/pre>\n\n\n\n<p>\ud83d\udcc1 \ud504\ub85c\uc81d\ud2b8 \uc2dc\uc791 \/ Project Start<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-wp-embed is-provider-freelifemakers-org wp-block-embed-freelifemakers-org\"><div class=\"wp-block-embed__wrapper\">\n<blockquote class=\"wp-embedded-content\" data-secret=\"DMNABhZi1H\"><a href=\"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/2026\/09\/03\/nextjs-project-summary\/\">[nextjs]\ud504\ub85c\uc81d\ud2b8\uc694\uc57d\/project summary(myapp30+)<\/a><\/blockquote><iframe loading=\"lazy\" class=\"wp-embedded-content\" sandbox=\"allow-scripts\" security=\"restricted\" style=\"position: absolute; visibility: hidden;\" title=\"&#8220;[nextjs]\ud504\ub85c\uc81d\ud2b8\uc694\uc57d\/project summary(myapp30+)&#8221; &#8212; freelifemakers.org\" src=\"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/2026\/09\/03\/nextjs-project-summary\/embed\/#?secret=661YCREjvg#?secret=DMNABhZi1H\" data-secret=\"DMNABhZi1H\" width=\"560\" height=\"315\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\"><\/iframe>\n<\/div><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>\ud83d\udcc1 \ucf54\ub4dc \uc218\uc815 \/ Code Modification<\/p>\n\n\n\n<p>\u2714\ufe0f \ud0c0\uc784\ub77c\uc778\uc5d0\uc11c \ub370\uc774\ud130\uac00 \uc5c6\uc73c\uba74 \ud0ed\uc0ac\ub77c\uc9c0\ub294 \uc624\ub958 \uc218\uc815<br>Fixed an error where the tab would disappear when there was no data in the timeline.<\/p>\n\n\n\n<p>\u2714\ufe0f \ub85c\uadf8\uc778\ud558\uc9c0 \uc54a\uc73c\uba74 \ud648\ud0ed\uc740 \ub85c\uceecAPI\ub97c \ud638\ucd9c<br>If not logged in, the Home tab calls the local API<\/p>\n\n\n\n<p>&#8212; app\/usersui\/[username]\/_components\/themes\/Themeex\/TimelineList.tsx<\/p>\n\n\n\n<pre class=\"wp-block-code\" style=\"font-size:14px\"><code>  const {\n    flatData,\n    fetchNextPage,\n    hasNextPage,\n    isFetchingNextPage,\n  } = useCursorPagination({\n... ...\n\n      \/\/ \u2705 myapp61 - API \uc8fc\uc18c \uc218\uc815 \/ modify API Address\n<strong>      \/\/ - fetcher \uc548\uc5d0\uc11c \uc9c1\uc811 \ub85c\uadf8\uc778 \uc5ec\ubd80 \uccb4\ud06c \ud558\uae30 \/ Check login status directly within the fetcher.\n      let me: string | null = null;\n      try {\n        const meRes = await fetch(`\/api\/auth\/me`, { credentials: 'include', cache: 'no-store' });\n        if (meRes.ok) {\n          const j = await meRes.json();\n          me = j.username || null;\n        }\n      } catch {}\n\n      const effectiveUser = me || currentUser;\n\n      let url = '';\n      if (tab === 'home') {\n        if (effectiveUser) {\n          url = `\/api\/v1\/timelines\/home?${params.toString()}`;\n        } else {\n          params.set('local', 'true');\n          url = `\/api\/v1\/timelines\/public?${params.toString()}`;\n        }\n      } else if (tab === 'local') {\n        params.set('local', 'true');\n        url = `\/api\/v1\/timelines\/public?${params.toString()}`;\n      } else {\n        url = `\/api\/v1\/timelines\/public?${params.toString()}`;\n      }<\/strong>\n... ...\n  });\n\n  \/\/ if (data.length === 0) {\n  \/\/   return &lt;div className=\"p-5 text-&#91;#999]\">\ud0c0\uc784\ub77c\uc778\uc774 \ube44\uc5b4\uc788\uc2b5\ub2c8\ub2e4 \/ No posts&lt;\/div>;\n  \/\/ }\n\n  return ( ... ...\n\n      {\/* \u2705 myapp61 - No posts\ub294 selector \uc544\ub798\uc5d0 \ud45c\uc2dc \/ \"No posts\" is displayed below the selector. *\/} \n<strong>      {data.length === 0 &amp;&amp; (\n        &lt;div className=\"p-10 text-center text-&#91;#999]\">\ud0c0\uc784\ub77c\uc778\uc774 \ube44\uc5b4\uc788\uc2b5\ub2c8\ub2e4 \/ No posts in {tab}&lt;\/div><\/strong>\n      )}\n... ...\n);<\/code><\/pre>\n\n\n\n<p>1)\ub85c\uadf8\uc778 \ubd80\ubd84\uc740 \uc11c\ubc84\uac00 \uc544\ub2cc \ud074\ub77c\uc774\uc5b8\ud2b8 \ubd80\ubd84\uc5d0\uc11c\ub294 getUser\ud568\uc218\ub85c \uc778\uc99d \uccb4\ud06c\ud560 \uc218 \uc5c6\uc74c<br>Regarding the login functionality, authentication cannot be verified using the <code>getUser<\/code> function on the client side; this must be handled on the server side.<\/p>\n\n\n\n<p>2)\ud074\ub77c\uc774\uc5b8\ud2b8\ub294 \uc778\uc99d \ud655\uc778\uc744 \uc704\ud574 <strong>\/api\/auth\/me<\/strong> \ub77c\uc6b0\ud2b8 \uc0ac\uc6a9\ud568<br>The client uses the <code>\/api\/auth\/me<\/code> route to verify authentication.<\/p>\n\n\n\n<p>3)\ub85c\uadf8\uc778 \ud55c \uacbd\uc6b0 home\ub77c\uc6b0\ud2b8 \ub85c\uadf8\uc778\ud558\uc9c0 \uc54a\uc73c\uba74 public\ub77c\uc6b0\ud2b8\ub85c \uc774\ub3d9<br>If logged in, navigate to the home route; if not logged in, navigate to the public route.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>\u2714\ufe0f \ud0c0\uc784\ub77c\uc778 Unknown \ubc0f \uc624\ub958 \/ Timeline Unknown and Errors<\/p>\n\n\n\n<p>&#8212; app\/api\/v1\/timelines\/[type]\/route.ts <\/p>\n\n\n\n<p>1)\ud0c0\uc784\ub77c\uc778 API\uc5d0\uc11c acct\uac12\uc744 \uc798\ubabb \uc918\uc11c \ubc1c\uc0dd\ud558\ub294 \uc624\ub958<br>An error caused by providing an incorrect &#8216;acct&#8217; value in the Timeline API.<\/p>\n\n\n\n<pre class=\"wp-block-code\" style=\"font-size:14px\"><code>    return {\n      id: String(row.id),\n      uri: longId, url: longId,\n      account: {\n        \/\/ id: isMy ? accountId : `remote_${row.username}`, \u2705 myapp61\n        id: isMy ? accountId : `remote_${row.username}@${acctDomain}`,\n        username: row.username, \n        \/\/ acct: `${row.username}@${DOMAIN}`, \u2705 myapp61\n       <strong> acct: displayAcct, <\/strong>\n        \/\/display_name: row.username, \n       <strong> display_name: accountUsername,<\/strong>\n        avatar: `https:\/\/${DOMAIN}\/icon.png`, avatar_static: `https:\/\/${DOMAIN}\/icon.png`,\n        header: `https:\/\/${DOMAIN}\/header.png`, header_static: `https:\/\/${DOMAIN}\/header.png`,\n      },\n... ...\n}<\/code><\/pre>\n\n\n\n<p>\u2714\ufe0f FollowingList,FollowerList UI \uc624\ub958\/error<\/p>\n\n\n\n<p>&#8212; app\/usersui\/[username]\/_components\/theme\/pinafore\/FollowingList.tsx<\/p>\n\n\n\n<p>&#8212; app\/usersui\/[username]\/_components\/theme\/pinafore\/FollowersList.tsx<\/p>\n\n\n\n<pre class=\"wp-block-code\" style=\"font-size:14px\"><code> &lt;div className=\"<strong>w-9 h-9<\/strong> rounded-full bg-&#91;#6364ff] text-white flex items-center justify-center font-extrabold shrink-0\"&gt;\n... ...\n          {\/* &lt;button className=\"ml-auto px-3 py-1 bg-&#91;#6364ff] text-white rounded-full text-xs font-bold hover:bg-&#91;#5556ee]\"&gt;\n            Following\n          &lt;\/button&gt; *\/} --&gt; or Delete<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code># v1 API\nhttps:&#47;&#47;aloy-horizon.duckdns.org\/api\/v1\/timelines\/public \nhttps:\/\/aloy-horizon.duckdns.org\/api\/v1\/timelines\/public?local=true\n\n# pinafore \ud14c\ub9c8\uc5d0\uc11c \uc0ac\uc6a9\ud558\ub294 \uc774\uc804 API\nhttps:\/\/aloy-horizon.duckdns.org\/api\/timeline?username=user1&amp;type=home<\/code><\/pre>\n\n\n\n<p>\u2714\ufe0f \ub9ac\ubaa8\ud2b8 \uae00\uc5d0\ub3c4 DELETE\ubc84\ud2bc \ubcf4\uc774\ub294\uac83 \uc218\uc815<br>Fixed the issue where the DELETE button was visible on remote posts.<\/p>\n\n\n\n<p>&#8212; \ub85c\uadf8\uc778 \ud6c4 \ub0b4\uac00 \uc791\uc131\ud55c \uae00\uc5d0\ub9cc DELETE\ubc84\ud2bc \ubcf4\uc784<br>The DELETE button appears only on posts I have written after logging in.<\/p>\n\n\n\n<pre class=\"wp-block-code\" style=\"font-size:14px\"><code>      \/\/ \u2705 myapp61\n      const withMine = arr.map((p:any) =&gt; {\n        const acct = p.account?.acct || '';\n        const username = p.account?.username || p.username || '';\n        const acctDomain = acct.includes('@')? acct.split('@')&#91;1] : DOMAIN;\n        const isLocalAccount = acctDomain === DOMAIN;\n\n        return {\n        ...p,\n          isMine:!!(currentUser &amp;&amp; isLocalAccount &amp;&amp; username === currentUser)\n        };\n      });  \n... ...              \n  {\/* {currentUser &amp;&amp; isMine &amp;&amp; (\n                  &lt;button onClick={() =&gt; onDelete(p.id)} className=\"text-&#91;#e0245e] ml-auto text-xs hover:underline\"&gt;\n                    \ud83d\uddd1 Delete\n                  &lt;\/button&gt;\n                )} *\/}\n                {\/* \u2705 myapp61 *\/}\n                {isMine &amp;&amp; (\n                  &lt;button onClick={() =&gt; onDelete(p.id)} className=\"text-&#91;#e0245e] ml-auto text-xs\"&gt;\n                    \ud83d\uddd1 Delete\n                  &lt;\/button&gt;\n                )}<\/code><\/pre>\n\n\n\n<p>\u2714\ufe0f SNS\ud398\uc774\uc9c0\uac00 \ucc98\uc74c \uc2e4\ud589\ub420\ub584 \ud0c0\uc784\ub77c\uc778\uc774 \ube44\uc5b4\uc788\ub294 \uac78\ub85c \ud45c\uc2dc\ub418\ub294 \uc624\ub958<br>An error where the timeline appears empty when the social media page is first launched.<\/p>\n\n\n\n<p>&#8212; app\/usersui\/[username]\/ClientPage.tsx<\/p>\n\n\n\n<pre class=\"wp-block-code\" style=\"font-size:14px\"><code>  \/\/ \u2705 myapp60 + myapp61\n  \/\/ - \ud398\uc774\uc9c0\ub124\uc774\uc158\uc740 TimelineList\uac00 \ub2f4\ub2f9, \uc5ec\uae30\uc120 \ube48 \ubc30\uc5f4\ub85c \uc2dc\uc791\n  \/\/ - Pagination is handled by TimelineList; start with an empty array here.\n  useEffect(() => {\n    if (!username) return;\n    \/\/setTimeline(&#91;]);\n    setLoading(false);\n  }, &#91;username]);<\/code><\/pre>\n\n\n\n<p>\ud83d\udcc1 \ud14c\uc2a4\ud2b8 \/ Test<\/p>\n\n\n\n<p>\u2714\ufe0f Unknown error<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"889\" src=\"https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/10\/myapp61-unknown-jpg.jpg\" alt=\"\" class=\"wp-image-12007\" srcset=\"https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/10\/myapp61-unknown-jpg.jpg 800w, https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/10\/myapp61-unknown-jpg-270x300.jpg 270w, https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/10\/myapp61-unknown-jpg-768x853.jpg 768w, https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/10\/myapp61-unknown-jpg-400x445.jpg 400w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><figcaption class=\"wp-element-caption\">Unknown error<\/figcaption><\/figure>\n\n\n\n<p>\u2714\ufe0f \ud314\ub85c\uc789,\ud314\ub85c\uc6cc\ub9ac\uc2a4\ud2b8 UI \uc624\ub958,\uc54c\ub9bc\ub370\uc774\ud130 \uc911\ubcf5 \ucc98\ub9ac<br>UI errors in following\/follower lists; handling of duplicate notification data.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"673\" src=\"https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/10\/myapp61-noti-jpg.jpg\" alt=\"\" class=\"wp-image-12019\" srcset=\"https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/10\/myapp61-noti-jpg.jpg 800w, https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/10\/myapp61-noti-jpg-300x252.jpg 300w, https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/10\/myapp61-noti-jpg-768x646.jpg 768w, https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/10\/myapp61-noti-jpg-400x337.jpg 400w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><figcaption class=\"wp-element-caption\">Notification<\/figcaption><\/figure>\n\n\n\n<p>\u2714\ufe0f \ub9ac\ubaa8\ud2b8 \uc11c\ubc84 \uc0ad\uc81c\uae08\uc9c0,\uc561\ud130 \uc815\ud655\ud788 \ud45c\uc2dc,\ub9ac\ubaa8\ud2b8 \uc11c\ubc84\uc544\uc774\ucf58\ud45c\uc2dc<br>Prevent remote server deletion, display actors accurately, show remote server icons.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"905\" src=\"https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/10\/myapp61-remote_delete-jpg.jpg\" alt=\"\" class=\"wp-image-12011\" srcset=\"https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/10\/myapp61-remote_delete-jpg.jpg 800w, https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/10\/myapp61-remote_delete-jpg-265x300.jpg 265w, https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/10\/myapp61-remote_delete-jpg-768x869.jpg 768w, https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/10\/myapp61-remote_delete-jpg-400x453.jpg 400w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><figcaption class=\"wp-element-caption\">Remote server<\/figcaption><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>\ub9c8\ud0dc\ubcf5\uc74c 21\uc7a5 22\uc808 \/ Matthew 21: 22<\/p>\n\n\n\n<p>&#8220;\ub108\ud76c\uac00 \uae30\ub3c4\ud560 \ub54c\uc5d0 \ubb34\uc5c7\uc774\ub4e0\uc9c0 \ubbff\uace0 \uad6c\ud558\ub294 \uac83\uc740 \ub2e4 \ubc1b\uc73c\ub9ac\ub77c \ud558\uc2dc\ub2c8\ub77c&#8221;<\/p>\n\n\n\n<p>&#8220;And everything you ask in prayer, believing, you will receive.&#8221;<\/p>\n<\/blockquote>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\ud83d\udc49\ud83c\udffb myapp61\uc5d0\uc11c\ub294 \uc54c\ub9bc\ud398\uc774\uc9c0\uc5d0\uc11c \ub370\uc774\ud130\uac00 \uc911\ubcf5 \ud45c\uc2dc\ub418\ub294 \ubb38\uc81c\ub97c \uc218\uc815 \ud569\ub2c8\ub2e4.In myapp61, the issue where data was displayed redundantly on the notification page is being fixed. \ud83d\udc49\ud83c\udffb \ud0c0\uc784\ub77c\uc778\uc5d0\uc11c \ub370\uc774\ud130\uac00 \uc5c6\uc73c\uba74 Home,Local,Federated \ud0ed\uc774 \uc0ac\ub77c\uc9c0\ub294 \ubb38\uc81c\ub97c \uc218\uc815\ud569\ub2c8\ub2e4.Fixes an issue where the Home, Local, and Federated tabs disappear when there is no data in the timeline. \ud83d\udc49\ud83c\udffb \ub0b4\uac00 \uc791\uc131\ud558\uc9c0 \uc54a\uc740 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":12011,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[28,27,1,7],"tags":[],"class_list":["post-11959","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-news","category-nextjs","category-uncategorized","category-website","has-thumbnail"],"_links":{"self":[{"href":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/wp-json\/wp\/v2\/posts\/11959","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/wp-json\/wp\/v2\/comments?post=11959"}],"version-history":[{"count":55,"href":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/wp-json\/wp\/v2\/posts\/11959\/revisions"}],"predecessor-version":[{"id":12022,"href":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/wp-json\/wp\/v2\/posts\/11959\/revisions\/12022"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/wp-json\/wp\/v2\/media\/12011"}],"wp:attachment":[{"href":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/wp-json\/wp\/v2\/media?parent=11959"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/wp-json\/wp\/v2\/categories?post=11959"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/wp-json\/wp\/v2\/tags?post=11959"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}