พันปี
เว็บไคลเอ็นต์ Mastodon ที่เน้นความเรียบง่าย
️ การออกเสียง : /fænpi/
( FAN-pee
) ? ฟัง
นี่คือเว็บไคลเอ็นต์ทางเลือกสำหรับ Mastodon
- - การผลิต : https://phanpy.social
- สาขา
production
- แตกบ่อยน้อยลง
- การแก้ไขช้าลงเว้นแต่จะสำคัญ
- ️ การพัฒนา : https://dev.phanpy.social
- สาขา
main
- อาจเห็นของเจ๋งๆใหม่ๆเร็วขึ้น
- อาจแตกหักบ่อยขึ้น
- อาจแก้ไขได้เร็วกว่ามากเช่นกัน
- ติดตาม @phanpy บน Mastodon เพื่อรับข้อมูลอัปเดต ✨
ทุกอย่างได้รับการออกแบบและออกแบบตามรสนิยมและวิสัยทัศน์ของฉัน นี่เป็นโปรเจ็กต์ส่วนตัวสำหรับฉันเพื่อเรียนรู้เกี่ยวกับ Mastodon และทดลองใช้แนวคิด UI/UX ใหม่
คุณสมบัติ
- - หลายบัญชี
- - เขียนหน้าต่างป๊อปเอาท์/เข้า
- - ธีมสว่าง/มืด/อัตโนมัติ
- - การแจ้งเตือนแบบกลุ่ม
- - เธรดความคิดเห็นที่ซ้อนกัน
- - การกู้คืนฉบับร่างที่ยังไม่ได้ส่ง
- - บูสต์ม้าหมุน™️
- ⚡ ปุ่มลัด™️ พร้อมโหมดมุมมอง เช่น หลายคอลัมน์หรือแถบแท็บ
- #️⃣ไทม์ไลน์หลายแฮชแท็ก
การตัดสินใจออกแบบ
- การกระทำของสถานะ (ตอบกลับ เร่ง รายการโปรด บุ๊กมาร์ก ฯลฯ) จะถูกซ่อนไว้ตามค่าเริ่มต้น
จะปรากฏเฉพาะในหน้าสถานะของแต่ละบุคคลเท่านั้น เพื่อลดความยุ่งเหยิงและความฟุ้งซ่าน อาจส่งผลให้การมีส่วนร่วมลดลง แต่เราไม่ได้ไล่ตามตัวเลขที่นี่ - Boost จะแสดงด้วยไอคอนรูปจรวด
ไอคอนลูกศรคู่สีเขียว (รีทวีตสำหรับ Twitter) ดูไม่เหมาะสมสำหรับคำว่า "บูสต์" จรวดสีเขียวดูแปลก ๆ เลยใช้สีม่วง - ชื่อผู้ใช้แบบสั้น (
@username
) จะแสดงในไทม์ไลน์ แทนที่จะเป็นชื่อผู้ใช้เต็มของบัญชี ( @username@instance
)
แม้จะมีคำแนะนำว่า "การกระจายอำนาจต้องโปร่งใสต่อผู้ใช้" แต่ฉันไม่คิดว่าเราควรผลักมันไปที่หน้าทุกครั้ง นอกจากนี้ยังมีข้อกังวลบางประการเกี่ยวกับการเข้าถึงที่เกี่ยวข้องกับโปรแกรมอ่านหน้าจอด้วยชื่อผู้ใช้แบบเต็ม แม้ว่าเว็บแอปนี้ยังไม่สามารถเข้าถึงได้ก็ตาม - ไม่มีการเล่นอัตโนมัติสำหรับวิดีโอ/GIF/อะไรก็ตามในไทม์ไลน์
ไทม์ไลน์ยุ่งวุ่นวายอย่างมากกับผู้คน แบรนด์ ข่าวสาร และสื่อจำนวนมากที่พยายามดึงดูดความสนใจของคุณ อย่าทำให้มันแย่ลง (ข้อยกเว้นในปัจจุบันคืออิโมจิแบบเคลื่อนไหว) - URL ที่ใช้แฮช
เว็บแอปนี้ไม่ได้มีวัตถุประสงค์เพื่อแทนที่ฟรอนต์เอนด์ที่มีอยู่ของ Mastodon อย่างเต็มรูปแบบ ไม่มี SEO, ฐานข้อมูล, เซิร์ฟเวอร์ไร้เซิร์ฟเวอร์ หรือเซิร์ฟเวอร์ที่ทำงานระยะยาวใดๆ ฉันอาจจะผิดสักวันหนึ่ง
การใช้งาน UI ที่ละเอียดอ่อน
การแสดงชื่อผู้ใช้
- บนไทม์ไลน์ ชื่อผู้ใช้จะแสดงเป็น
[NAME] @[username]
- สำหรับ
@[username]
ให้ยกเว้นชื่อโดเมนอินสแตนซ์เสมอ - หาก
[NAME]
ดูเหมือน @[username]
แสดงว่า @[username]
จะถูกแยกออกเช่นกัน
บูสต์ม้าหมุน
- จากโพสต์ที่ดึงมา (เช่น 20 โพสต์ต่อการดึงข้อมูล) หากจำนวนการบูสต์มากกว่าหนึ่งในสี่ของโพสต์ทั้งหมด หรือมีบูสต์ติดต่อกันมากกว่า 3 ครั้ง UI แบบหมุนบูสต์จะถูกทริกเกอร์
- หากจำนวนการบูสต์มากกว่า 3 ใน 4 ของโพสต์ทั้งหมด UI แบบหมุนบูสต์จะถูกวางไว้ที่ส่วนท้ายของการดึงโพสต์ทั้งหมด (ต่อ "หน้า")
- มิฉะนั้น UI แบบหมุนบูสต์จะถูกคั่นระหว่างโพสต์
ป้ายหมายเลขเกลียว (เช่น เกลียว 1/X)
- ตรวจสอบทุกโพสต์เพื่อหา
inReplyToId
จากแคชหรือคำขอ API เพิ่มเติม จนกว่าจะพบโพสต์หลัก - หากพบโพสต์หลัก ป้ายจะแสดงหมายเลขดัชนีของโพสต์ในเธรด
- จำกัดคำขอ API ได้สูงสุด 3 รายการเนื่องจากการโพสต์รูทอาจเก่ามากหรือเธรดยาวมาก
- หากไม่พบหมายเลขดัชนี ป้ายจะกลับไปแสดง
Thread
โดยไม่มีหมายเลข
แฮชแท็กไส้ยุบ
- ย่อหน้าแรกของเนื้อหาโพสต์ที่มีแฮชแท็กมากกว่า 3 รายการจะถูกยุบเหลือสูงสุด 3 บรรทัด
- ย่อหน้าถัดไปหลังจากย่อหน้าแรกที่มีแฮชแท็กมากกว่า 3 รายการจะถูกยุบเหลือ 1 บรรทัด
- ย่อหน้าที่อยู่ติดกันซึ่งมีแฮชแท็กมากกว่า 1 รายการหลังจากย่อหน้าที่ถูกยุบจะถูกยุบเหลือ 1 บรรทัด
- หากมีข้อความรอบๆ หรือระหว่างแฮชแท็ก ข้อความเหล่านั้นจะไม่ถูกยุบ
- แฮชแท็กที่ยุบจะถูกต่อท้ายด้วย
...
ต่อท้าย - อีกทั้งยังจางลงเล็กน้อยเพื่อลดสัญญาณรบกวนทางสายตา
- การเปิดมุมมองโพสต์จะเผยให้เห็นแฮชแท็กที่ไม่ยุบ
โพสต์ที่ถูกกรอง
- "ซ่อนทั้งหมด" - โพสต์ที่กรองแล้วจะถูกซ่อนโดยไม่มี UI ให้เปิดเผย
- "ซ่อนพร้อมคำเตือน" - โพสต์ที่กรองแล้วจะถูกซ่อนไว้บางส่วน โดยแสดงชื่อตัวกรองและชื่อผู้เขียน
- สามารถเปิดเผยเนื้อหาบางส่วนได้โดยการวางเมาส์เหนือโพสต์ โดยมีคำแนะนำเครื่องมือแสดงข้อความของโพสต์
- การคลิกจะเป็นการเปิดหน้าโพสต์
- การกดค้างหรือคลิกขวาจะเป็นการ "ดู" โพสต์ด้วย UI ของแผ่นงานด้านล่าง
- ในภาพหมุนบูสต์ พวกมันจะถูกจัดเรียงไปจนถึงจุดสิ้นสุดของภาพหมุน
การพัฒนา
ข้อกำหนดเบื้องต้น: Node.js 18+
-
npm install
- ติดตั้งการอ้างอิง -
npm run dev
- เริ่มเซิร์ฟเวอร์การพัฒนาและ messages:extract
( clean
+ ``watch`) พร้อมกัน -
npm run build
- สร้างเพื่อการใช้งานจริง -
npm run preview
- ดูตัวอย่างบิลด์ที่ใช้งานจริง -
npm run fetch-instances
- ดึงรายการอินสแตนซ์จาก joinmastodon.org/servers บันทึกไปที่ src/data/instances.json
-
npm run sourcemap
- รัน source-map-explorer
บนบิลด์ที่ใช้งานจริง -
npm run messages:extract
- แยกข้อความจากไฟล์ต้นฉบับและอัพเดตแค็ตตาล็อกข้อความโลแคล
เทคสแต็ค
- Vite - สร้างเครื่องมือ
- Preact - ไลบรารี UI
- Valtio - การจัดการของรัฐ
- ตอบสนองเราเตอร์ - การกำหนดเส้นทาง
- Masto.js - ไคลเอนต์ Mastodon API
- Iconify - ไลบรารีไอคอน
- Lingui - ความเป็นสากล
- Vanilla CSS - ใช่ ฉันแก่แล้ว
สิ่งเหล่านี้บางส่วนอาจมีการเปลี่ยนแปลงในอนาคต โลกส่วนหน้ามีการเปลี่ยนแปลงตลอดเวลา
ความเป็นสากล
คำแปลทั้งหมดมีอยู่ในไฟล์ gettext .po
ในโฟลเดอร์ src/locales
ภาษาเริ่มต้นคือภาษาอังกฤษ ( en
) กฎพหูพจน์ของ CLDR ใช้สำหรับการทำให้เป็นพหูพจน์ ภาษา RTL (ขวาไปซ้าย) ยังรองรับด้วยทิศทางของข้อความ การแสดงไอคอน และการจัดวางที่เหมาะสม
ในการโหลดหน้าเว็บ ภาษาเริ่มต้นจะถูกตรวจพบโดยวิธีการเหล่านี้ ตามลำดับ (ใช้รายการแรก):
- พารามิเตอร์ URL
lang
เช่น /?lang=zh-Hant
- คีย์
localStorage
lang
-
navigator.language
ของเบราว์เซอร์
ผู้ใช้สามารถเปลี่ยนภาษาในการตั้งค่า ซึ่งกำหนดคีย์ localStorage
lang
คู่มือสำหรับนักแปล
*ได้รับแรงบันดาลใจจากคู่มือแปล WordPress:
- อย่าแปลตามตัวอักษร แต่แปลแบบออร์แกนิก
- พยายามรักษาความเป็นทางการ (หรือไม่เป็นทางการ) ในระดับเดิม
- อย่าใช้คำสแลงหรือคำเฉพาะเจาะจงผู้ฟัง
- เอาใจใส่ตัวยึดตำแหน่งสำหรับตัวแปร สตริงจำนวนมากมีตัวยึดตำแหน่ง เช่น
{account}
(ตัวแปร), <0>{name}0>
(แท็กพร้อมตัวแปร) และ #
(ตัวยึดตัวเลข) - จุดไข่ปลา (…) มีเจตนา อย่าถอดมันออก
- Nielsen Norman Group: "รวมวงรีในข้อความคำสั่งเพื่อระบุว่าเมื่อใดจำเป็นต้องมีข้อมูลเพิ่มเติม"
- คำแนะนำเกี่ยวกับอินเทอร์เฟซผู้ใช้ของ Apple: "เพิ่มจุดไข่ปลาต่อท้ายป้ายกำกับของรายการเมนูเมื่อการดำเนินการต้องการข้อมูลเพิ่มเติมก่อนจึงจะเสร็จสมบูรณ์ได้ อักขระจุดไข่ปลา (...) ส่งสัญญาณว่าผู้คนจำเป็นต้องป้อนข้อมูลหรือทำตัวเลือกเพิ่มเติม ซึ่งโดยทั่วไปจะอยู่ภายในมุมมองอื่น"
- การพัฒนาแอพ Windows: "จุดไข่ปลาหมายถึงความไม่สมบูรณ์"
- การประทับเวลาวันที่ ช่วงวันที่ ตัวเลข ชื่อภาษา และการแบ่งส่วนข้อความได้รับการจัดการโดย ECMAScript Internationalization API
-
Intl.DateTimeFormat
- เช่น "8 ส.ค.", "08/08/2024" -
Intl.RelativeTimeFormat
- เช่น "2 วันที่แล้ว", "ใน 2 วัน" -
Intl.NumberFormat
- เช่น "1,000", "10K" -
Intl.DisplayNames
- เช่น "ภาษาอังกฤษ" ( en
) ในภาษาจีนตัวเต็ม ( zh-Hant
) คือ "英文" -
Intl.Locale
(พร้อม polyfill สำหรับเบราว์เซอร์รุ่นเก่า) -
Intl.Segmenter
(พร้อม polyfill สำหรับเบราว์เซอร์รุ่นเก่า)
หมายเหตุทางเทคนิค
การแปลโดยอาสาสมัคร
การแปลได้รับการจัดการบน Crowdin คุณสามารถช่วยได้ด้วยการอาสาแปล
อ่านเอกสารแนะนำเพื่อเริ่มต้น
โฮสติ้งด้วยตนเอง
นี่คือ แอปพลิเคชันเว็บแบบคงที่ล้วนๆ คุณสามารถโฮสต์ได้ทุกที่ที่คุณต้องการ
สองวิธี (เลือกอย่างใดอย่างหนึ่ง):
วิธีง่ายๆ
ไปที่ Releases และดาวน์โหลด phanpy-dist.zip
หรือ phanpy-dist.tar.gz
ล่าสุด มันถูกสร้างไว้ล่วงหน้าแล้ว ดังนั้นจึงไม่จำเป็นต้องรันคำสั่งติดตั้ง/บิวด์ใดๆ สกัดมัน ให้บริการโฟลเดอร์ของไฟล์ที่แยกออกมา
วิธีการสร้างแบบกำหนดเอง
ต้องใช้ Node.js
ดาวน์โหลดหรือ git clone
ที่เก็บนี้ ใช้สาขา production
สำหรับการเผยแพร่ ที่เสถียร main
สำหรับ ไฟล์ . สร้างมันโดยการรัน npm run build
(หลังจาก npm install
) ให้บริการโฟลเดอร์ dist
การปรับแต่งสามารถทำได้โดยการส่งตัวแปรสภาพแวดล้อมไปยังคำสั่ง build ตัวอย่าง:
PHANPY_CLIENT_NAME= " Phanpy Dev "
PHANPY_WEBSITE= " https://dev.phanpy.social "
npm run build
PHANPY_DEFAULT_INSTANCE=hachyderm.io
PHANPY_DEFAULT_INSTANCE_REGISTRATION_URL=https://hachyderm.io/auth/sign_up
PHANPY_PRIVACY_POLICY_URL=https://hachyderm.io/privacy-policy
npm run build
นอกจากนี้ยังสามารถตั้งค่าเป็นไฟล์ .env
ได้ด้วย
ตัวแปรที่มีอยู่:
-
PHANPY_CLIENT_NAME
(ไม่บังคับ ค่าเริ่มต้น: Phanpy
) ส่งผลต่อ:- ชื่อหน้าเว็บ แสดงในหน้าต่างเบราว์เซอร์หรือชื่อแท็บ
- ชื่อแอป เมื่อติดตั้งเป็น PWA จะแสดงในหน้าจอโฮม, แท่นเชื่อมต่อ macOS, ทาสก์บาร์ของ Windows ฯลฯ
- ชื่อการ์ด OpenGraph เมื่อแชร์บนโซเชียลเน็ตเวิร์ก
- ชื่อลูกค้า เมื่อลงทะเบียนแอปเพื่อตรวจสอบสิทธิ์ และแสดงเป็นไคลเอ็นต์ที่ใช้ในโพสต์ในบางแอป/ไคลเอ็นต์
-
PHANPY_WEBSITE
(เป็นทางเลือก แต่แนะนำ ค่าเริ่มต้น: https://phanpy.social
) ส่งผลต่อ:- Canonical URL ของเว็บไซต์
- URL การ์ด OpenGraph เมื่อแชร์บนโซเชียลเน็ตเวิร์ก
- เส้นทางรูทสำหรับอิมเมจการ์ด OpenGraph
- URL ไคลเอ็นต์ เมื่อลงทะเบียนแอปเพื่อตรวจสอบสิทธิ์และแสดงเป็นไคลเอ็นต์ที่ใช้ในโพสต์ในบางแอป/ไคลเอ็นต์
-
PHANPY_DEFAULT_INSTANCE
(ไม่บังคับ ไม่มีค่าเริ่มต้น):- เช่น 'mastodon.social' โดยไม่มี
https://
- อินสแตนซ์เริ่มต้นสำหรับการเข้าสู่ระบบ
- เมื่อเข้าสู่ระบบ ผู้ใช้จะถูกเปลี่ยนเส้นทางไปยังหน้าการตรวจสอบสิทธิ์ของอินสแตนซ์ทันที แทนที่จะต้องพิมพ์ URL ของอินสแตนซ์ด้วยตนเองและส่ง
-
PHANPY_DEFAULT_INSTANCE_REGISTRATION_URL
(ไม่บังคับ ไม่มีค่าเริ่มต้น):- URL ของหน้าการลงทะเบียนอินสแตนซ์
- เช่น
https://mastodon.social/auth/sign_up
-
PHANPY_PRIVACY_POLICY_URL
(ไม่บังคับ เป็นค่าเริ่มต้นตามนโยบายความเป็นส่วนตัวของอินสแตนซ์อย่างเป็นทางการ):- URL ของหน้านโยบายความเป็นส่วนตัว
- อาจระบุนโยบายความเป็นส่วนตัวของอินสแตนซ์เอง
-
PHANPY_DEFAULT_LANG
(ไม่บังคับ):- ภาษาเริ่มต้นคือภาษาอังกฤษ (
en
) หากไม่ได้ระบุ - ภาษาสำรองหลังจากวิธีการตรวจจับหลายวิธี (พารามิเตอร์การสืบค้น
lang
, คีย์ lang
ใน localStorage
และ navigator.language
)
-
PHANPY_LINGVA_INSTANCES
(ตัวเลือก รายการที่คั่นด้วยช่องว่าง ค่าเริ่มต้น: lingva.phanpy.social [...hard-coded list of fallback instances]
):- ระบุรายการอินสแตนซ์ที่คั่นด้วยช่องว่าง อันดับแรกจะถูกใช้เป็นค่าเริ่มต้นก่อนที่จะถอยกลับไปยังอินสแตนซ์ถัดไป หากมีเพียง 1 อินสแตนซ์ หมายความว่าไม่มีทางเลือก
- อาจระบุอินสแตนซ์ Lingva ที่โฮสต์เอง ซึ่งขับเคลื่อนโดย lingva-translate หรือ lingva-api
- รายการอินสแตนซ์ทางเลือกที่ฮาร์ดโค้ดใน
/.env
- รายการอินสแตนซ์ lingva-translate
-
PHANPY_IMG_ALT_API_URL
(ไม่บังคับ ไม่มีค่าเริ่มต้น):- ตำแหน่งข้อมูล API สำหรับอินสแตนซ์ img-alt-api ที่โฮสต์ด้วยตนเอง
- หากระบุไว้ การตั้งค่าจะปรากฏขึ้นเพื่อให้ผู้ใช้เปิดใช้งานตัวสร้างคำอธิบายรูปภาพในตัวแต่งเพลง ปิดใช้งานตามค่าเริ่มต้น
-
PHANPY_GIPHY_API_KEY
(เป็นทางเลือก ไม่มีค่าเริ่มต้น):- คีย์ API สำหรับ GIPHY ดูเอกสาร API
- หากระบุไว้ การตั้งค่าจะปรากฏให้ผู้ใช้เปิดใช้งานตัวเลือก GIF ในโปรแกรมแต่งเพลง ปิดใช้งานตามค่าเริ่มต้น
- นี่ไม่ใช่การโฮสต์ด้วยตนเอง
การโฮสต์ไซต์แบบคงที่
ลองค้นหาออนไลน์ด้วยคำว่า "วิธีโฮสต์ไซต์คงที่ด้วยตนเอง" เนื่องจากมีหลายวิธีในการดำเนินการ
โฮสติ้ง Lingva-translate หรือ lingva-api
ดูเอกสารประกอบสำหรับ lingva-translate หรือ lingva-api
การปรับใช้ชุมชน
สิ่งเหล่านี้โฮสต์ด้วยตนเองโดยคนที่ยอดเยี่ยมคนอื่นๆ
- ferengi.one โดย @david@weaknotes.com
- halo.mookiesplace.com โดย @mookie@mookiesplace.com
- phanpy.bauxite.tech โดย @b4ux1t3@hachyderm.io
- phanpy.blaede.family โดย @cassidy@blaede.family
- phanpy.crmbl.uk โดย @snail@crmbl.uk
- phanpy.cz โดย @zdendys@mamutovo.cz
- phanpy.fulda.social โดย @Ganneff@fulda.social
- phanpy.gotosocial.social โดย @admin@gotosocial.social
- phanpy.hear-me.social โดย @admin@hear-me.social
- phanpy.mastodon.world โดย @ruud@mastodon.world
- phanpy.mstdn.mx โดย @maop@mstdn.mx
- phanpy.social.tchncs.de โดย @milan@social.tchncs.de
- phanpy.tilde.zone โดย @ben@tilde.zone
- phanpy.vmst.io โดย @vmstan@vmst.io
- social.qrk.one โดย @kev@fosstodon.org
หมายเหตุ: เพิ่มของคุณโดยการสร้างคำขอดึง
ค่าใช้จ่าย
ค่าใช้จ่ายที่เกี่ยวข้องกับการใช้งานและการพัฒนาเว็บแอปนี้:
- ชื่อโดเมน (.social): USD$23.18/ปี (USD$6.87 ปีที่ 1)
- โฮสติ้ง: ฟรี
- การพัฒนา ออกแบบ บำรุงรักษา: "ฟรี" (เวลาอันมีค่าของฉัน)
มาสค็อต
Phanpy เป็นโปเกมอนประเภทพื้นดิน
ผู้ดูแล+ผู้มีส่วนร่วม
- ชีอั๋น (มาสโตดอน) (Twitter)
อาสาสมัครแปล
- alidsds11 (อาหรับ)
- ทางเลือก (เกาหลี)
- BoFFire (อาหรับ, ฝรั่งเศส, คาบิล)
- บราวารู (รัสเซีย)
- cbasje (ดัตช์)
- cbo92 (ฝรั่งเศส)
- CDN (จีนตัวย่อ)
- dannypsnl (ภาษาจีนแบบดั้งเดิม)
- databio (คาตาลัน)
- ดิซโร (อิตาลี)
- Drift6944 (เช็ก)
- drydenwu (จีนดั้งเดิม)
- เอลิสซาร์ก (ฝรั่งเศส)
- เอลปัมพลินา (สเปน)
- Fitik (เอสเปรันโต, ฮีบรู)
- ฟรีเซีย (ญี่ปุ่น)
- ghose (กาลิเซีย)
- ฮงมินฮี (เกาหลี)
- Hugoglyph (เอสเปรันโต, สเปน)
- isard (คาตาลัน)
- คาลิอูวู (โปแลนด์)
- คาร์ลาเฟจ (เช็ก)
- katullo11 (ภาษาอิตาลี)
- กิตตา (เยอรมัน)
- ลุน (ไทย)
- lucasofchirst (อ็อกซิตัน, โปรตุเกส, โปรตุเกส, บราซิล)
- ลูกฮง (ภาษาจีนดั้งเดิม)
- marcin.kozinski (โปแลนด์)
- mkljczkk (โปแลนด์)
- โมโจโซอึน (เกาหลี)
- โมเรียล (เกาหลี)
- MrWillCom (จีนประยุกต์)
- nclm (ฝรั่งเศส)
- ปาซปี (ภาษาอิตาลี)
- พังค์ร็อกเกิร์ล (บาสก์)
- radecos (ฝรั่งเศส)
- ราเซ็ม (เช็ก)
- รหัส realpixel (เยอรมัน)
- เรซาฮอสเซนซาเดห์ (เปอร์เซีย)
- rwmpelstilzchen (เอสเปรันโต, ฮีบรู)
- SadmL (รัสเซีย)
- SadmL_AI (รัสเซีย)
- ชูจิ3 (ภาษาญี่ปุ่น)
- Sky_NiniKo (ฝรั่งเศส)
- สเตฟโฟ99 (อิตาลี)
- ซู5ฮิชซ์ (เช็ก)
- เทเฟอร์เรร์โม (สเปน)
- tkbremnes (ภาษานอร์เวย์ Bokmal)
- tux93 (เยอรมัน)
- วัคซีน31. (ลิทัวเนีย)
- วัลไล (ฟินแลนด์)
- วาซิริริ (โปแลนด์)
- การเดินทาง (ภาษาจีนแบบดั้งเดิม)
- xabi_itzultzaile (บาสก์)
- xen4n (ยูเครน)
- xqueralt (คาตาลัน)
- ซิริสุทธิ์ (คาบิล)
- ซเครเมล (เช็ก)
เรื่องราวเบื้องหลัง
ฉันเป็นหนึ่งในผู้ใช้ Twitter คนแรกๆ ทวิตเตอร์เปิดตัวเมื่อวันที่ 15 กรกฎาคม พ.ศ. 2549 ฉันเข้าร่วมเมื่อเดือนธันวาคม พ.ศ. 2549 และทวีตแรกของฉันถูกโพสต์เมื่อวันที่ 18 ธันวาคม พ.ศ. 2549
ฉันรู้ว่า Twitter ในยุคแรกๆ หน้าตาเป็นอย่างไร มันสนุกดี
ย้อนกลับไปตอนนั้น ฉันสร้างโคลน Twitter ชื่อ "Twig" ที่เขียนด้วย Python และ Google App Engine ฉันเกือบจะสร้างไคลเอนต์เดสก์ท็อป Twitter ของตัวเองที่เขียนด้วย Appcelerator Titanium ฉันได้พูดคุยที่ดีที่สุดเรื่องหนึ่งเกี่ยวกับไคลเอนต์ Twitter ในการประชุมขนาดเล็ก ฉันสร้างสิ่งนี้ที่เรียกว่า "คอลัมน์ Twitter" ซึ่งเป็นเว็บแอปที่แสดงรายการผู้ติดตาม ผู้ติดตามของคุณ ผู้ติดตาม ผู้ติดตามของคุณ และอื่นๆ ในปี 2009 ฉันเขียนบล็อกโพสต์ชื่อ "ฉันเริ่มต้นใช้งาน Twitter ได้อย่างไร" ฉันสร้างธีมสองธีมสำหรับ DestroyTwitter (ไคลเอ็นต์เดสก์ท็อปที่สร้างด้วย Adobe Air โดย Jonnie Hallman) และหนึ่งในนั้นเรียกว่า "Vimeo" ในปี 2013 ฉันเขียนไซต์สำรองทวีตของตัวเองโดยมีส่วนหน้าเพื่อดูทวีตของฉันและมีแบ็กเอนด์ CouchDB เพื่อจัดเก็บทวีตเหล่านั้น
เป็นเวลา กว่า 15 ปีแล้ว
และฉันอยู่ที่นี่ การสร้างเว็บไคลเอ็นต์ Mastodon
เว็บไคลเอ็นต์ทางเลือก
- ส้อม Phanpy ↓
- ผ้าอ้อม (เลิกใช้แล้ว) - ส้อม ↓
- กุ๊กกู+
- เซนกิ
- กล่องสบู่
- กวางเอลก์ - ส้อม ↓
- มาสโตเด็ค
- ลำต้น
- ทูตี้
- กระบะทราย
- สเตตัสเซอร์
- งาช้าง
- Mastodon Glitch Edition (ส่วนหน้าแบบสแตนด์อโลน)
- แมงกานีส
- เดอะเดสก์
- มากกว่า...
?♂️ ประกาศถึงผู้พัฒนาไคลเอนต์โซเชียลมีเดียรายอื่นทั้งหมด
โปรดคัดลอกแนวคิด UI และการทดลองจากแอปนี้ ฉันคิดว่าบางอันก็ค่อนข้างดี และคงจะดีถ้ามีแอปมากกว่านี้
หากคุณไม่ใช่นักพัฒนา โปรดบอกนักพัฒนาไคลเอ็นต์โซเชียลมีเดียที่คุณชื่นชอบเกี่ยวกับแอปนี้ และขอให้พวกเขาคัดลอกแนวคิดและการทดสอบ UI
ใบอนุญาต
เอ็มไอที.