Compare commits

...

6 Commits

Author SHA1 Message Date
kang
3237ef8271 feat: 12 套 Sketch 也上 Figma,47/47 模板全部投射就位
- 16 个 .sketch 经 Playwright Import 上传(Figma 自动转 fig)
- 匹配脚本扩展:fig 优先,sketch 次之
- 47/47 匹配(35 fig + 12 sketch-only)
- banner 文案更新

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-22 15:58:06 +08:00
be6d4f7b48 auto-save 2026-04-22 15:57 (~2) 2026-04-22 15:57:23 +08:00
54a0ca8058 auto-save 2026-04-22 15:51 (~1) 2026-04-22 15:51:52 +08:00
ed5d7f32a5 auto-save 2026-04-22 15:46 (~1) 2026-04-22 15:46:22 +08:00
3e4f4eeb07 auto-save 2026-04-22 15:40 (~1) 2026-04-22 15:40:52 +08:00
8992d360b6 auto-save 2026-04-22 15:35 (+1) 2026-04-22 15:35:22 +08:00
5 changed files with 520 additions and 73 deletions

39
.memory/worklog.json Normal file
View File

@@ -0,0 +1,39 @@
{
"entries": [
{
"ts": "2026-04-22T15:31:45+08:00",
"type": "commit",
"message": "feat: 初始化 Figma 模板库 56 套展示站",
"hash": "ee719d0",
"files_changed": 289
},
{
"ts": "2026-04-22T15:35:22+08:00",
"type": "commit",
"message": "auto-save 2026-04-22 15:35 (+1)",
"hash": "8992d36",
"files_changed": 1
},
{
"ts": "2026-04-22T15:40:52+08:00",
"type": "commit",
"message": "auto-save 2026-04-22 15:40 (~1)",
"hash": "3e4f4ee",
"files_changed": 1
},
{
"ts": "2026-04-22T15:46:22+08:00",
"type": "commit",
"message": "auto-save 2026-04-22 15:46 (~1)",
"hash": "ed5d7f3",
"files_changed": 1
},
{
"ts": "2026-04-22T15:51:52+08:00",
"type": "commit",
"message": "auto-save 2026-04-22 15:51 (~1)",
"hash": "54a0ca8",
"files_changed": 1
}
]
}

View File

@@ -1 +1,262 @@
[{"key":"CLZepne3voPYx198q3wUHO","name":"Bright Kit"},{"key":"LA2daTQaigGkMUUNgPr6fp","name":"AKASHA-PAGEBUILDING-KIT"},{"key":"tLnL0G13yvkQtBZeQmPeq5","name":"06 Open Menu - Orabel Web UI Kit"},{"key":"bCrGhKu5PwOZh4F2EbyLk8","name":"05 Contact - Orabel Web UI Kit"},{"key":"Dc4uWhUeLCC6f2wiblXiBa","name":"04 Blog - Orabel Web UI Kit"},{"key":"BOnT7oN2pavJlDCdAO9Yih","name":"03 Portfolio - Orabel Web UI Kit"},{"key":"AEZMbGAy5IfnDAkFrbYwB6","name":"02 About - Orabel Web UI Kit"},{"key":"IoQBzPjHw51WjFKL52kJKN","name":"01 Home - Orabel Web UI Kit"},{"key":"IpdxPbiWuGZQpr3aNXsVpC","name":"Fecca"},{"key":"vcb4bLF79NTpybgXvAtkNM","name":"GETPAY - FINANCE TEMPLATES DESIGN"},{"key":"pMjAEiLKAFE57eaI4f4vva","name":"Aset - skill Shoot"},{"key":"U4YDJ7B0Sefem9r8LiEs8b","name":"Ui8_RealStatic_Static Mania"},{"key":"KtGIx2vrYNtApMiPYCTiiB","name":"Quicker Design system"},{"key":"3rhRDK0NC4oniMRGLNGnte","name":"WILOA - TRAVEL"},{"key":"1zIi1k19ngpoGixSB3upum","name":"WILOA - RESTAURANT"},{"key":"lv1hy5bS3Wx86slIXgorFn","name":"WILOA - PLANT"},{"key":"7C3QNOG6FhBRguT3nQ3dzf","name":"WILOA - HOTEL"},{"key":"df0oLsZta06a79s5iepJdF","name":"LANDINGKUY - Landing Page Design"},{"key":"Suvu5K5DSKPngkMKRb01MK","name":"Real Estate SaaS Kit & Dashboard (UI8)"},{"key":"sHmAQQxmvRTIxOg8OgQQFG","name":"3 template Agency"},{"key":"oZ7a2aFNZ21bg128ixnB3k","name":"Wiredunk_Wireframe"},{"key":"huDsMAoVThpYnGAU9j8WVB","name":"Modularity"},{"key":"4OTPxx5sgN8eFJ3joudoVH","name":"MasterFlow_UI_Kit"},{"key":"uAcopfnDXakv7l5Jr6sMqG","name":"iotask"},{"key":"fL1KqwIS3OmHCsUwhgJusG","name":"Figmaland- UI Kit (Startup)"},{"key":"PJHgFt29Lyo3JwMKxa5Tsm","name":"04_DailyUI_Video_Landing_Website"},{"key":"RNRNDiF6gFcTCi6wJncvgv","name":"JackCreative"},{"key":"BfBzvqu4VK53iSD5fbKNAo","name":"Intirior Architecture web ui kit"},{"key":"RKIYTIOCADVsASHNxZ5tr2","name":"Social Media Dashboard - UI Kit"},{"key":"qFC0pVEHe9Toc2aJ2MgO32","name":"DevAgency - Web Ui Kits"},{"key":"khWI1rrgwj5702NilEcha2","name":"Sydney Oasis Hotel Websites"},{"key":"5CZLD5lcxxRQNE1QWjqbmP","name":"UXFlow Web Kit"},{"key":"dvPWtG7KaEWr895iCI0Ioy","name":"LOOMI"},{"key":"5R9tevOwnk4iJzU3jEjg0q","name":"Landing UI Kit"},{"key":"oyHlh6eh7TjxYhCUbFTvBS","name":"Jobhuntly - Job Board & Portal UI Kit"},{"key":"G4mWQN0IWGkAKpD7Ga0bG3","name":"Core - Dashboard Builder"},{"key":"Sarco9c50gDttu37szmurE","name":"Webflew Agency UI Kit"},{"key":"x3g1FivshKeZ9PwccE7w3w","name":"Core - Dashboard Builder"},{"key":"fsufV596UmcNyM8yfCYlAr","name":"Eco -Ecommerce Analytics Admin Dashboard"},{"key":"s5KbowY6N6M4IkjHbgLjOc","name":"Figmaland-UI MAX ( ui8 )"},{"key":"ms5OYBa3fRlDwRmSLWWorY","name":"Online Shop UI Kit"},{"key":"pxsKzhDM8UL8oTSB4hUpOZ","name":"saascuy"},{"key":"EKp3ZDo2A3kDp88DMvFqte","name":"Havoc Agency UI Kit"}] [
{
"key": "CLZepne3voPYx198q3wUHO",
"name": "Bright Kit"
},
{
"key": "LA2daTQaigGkMUUNgPr6fp",
"name": "AKASHA-PAGEBUILDING-KIT"
},
{
"key": "tLnL0G13yvkQtBZeQmPeq5",
"name": "06 Open Menu - Orabel Web UI Kit"
},
{
"key": "bCrGhKu5PwOZh4F2EbyLk8",
"name": "05 Contact - Orabel Web UI Kit"
},
{
"key": "Dc4uWhUeLCC6f2wiblXiBa",
"name": "04 Blog - Orabel Web UI Kit"
},
{
"key": "BOnT7oN2pavJlDCdAO9Yih",
"name": "03 Portfolio - Orabel Web UI Kit"
},
{
"key": "AEZMbGAy5IfnDAkFrbYwB6",
"name": "02 About - Orabel Web UI Kit"
},
{
"key": "IoQBzPjHw51WjFKL52kJKN",
"name": "01 Home - Orabel Web UI Kit"
},
{
"key": "IpdxPbiWuGZQpr3aNXsVpC",
"name": "Fecca"
},
{
"key": "vcb4bLF79NTpybgXvAtkNM",
"name": "GETPAY - FINANCE TEMPLATES DESIGN"
},
{
"key": "pMjAEiLKAFE57eaI4f4vva",
"name": "Aset - skill Shoot"
},
{
"key": "U4YDJ7B0Sefem9r8LiEs8b",
"name": "Ui8_RealStatic_Static Mania"
},
{
"key": "KtGIx2vrYNtApMiPYCTiiB",
"name": "Quicker Design system"
},
{
"key": "3rhRDK0NC4oniMRGLNGnte",
"name": "WILOA - TRAVEL"
},
{
"key": "1zIi1k19ngpoGixSB3upum",
"name": "WILOA - RESTAURANT"
},
{
"key": "lv1hy5bS3Wx86slIXgorFn",
"name": "WILOA - PLANT"
},
{
"key": "7C3QNOG6FhBRguT3nQ3dzf",
"name": "WILOA - HOTEL"
},
{
"key": "df0oLsZta06a79s5iepJdF",
"name": "LANDINGKUY - Landing Page Design"
},
{
"key": "Suvu5K5DSKPngkMKRb01MK",
"name": "Real Estate SaaS Kit & Dashboard (UI8)"
},
{
"key": "sHmAQQxmvRTIxOg8OgQQFG",
"name": "3 template Agency"
},
{
"key": "oZ7a2aFNZ21bg128ixnB3k",
"name": "Wiredunk_Wireframe"
},
{
"key": "huDsMAoVThpYnGAU9j8WVB",
"name": "Modularity"
},
{
"key": "4OTPxx5sgN8eFJ3joudoVH",
"name": "MasterFlow_UI_Kit"
},
{
"key": "uAcopfnDXakv7l5Jr6sMqG",
"name": "iotask"
},
{
"key": "fL1KqwIS3OmHCsUwhgJusG",
"name": "Figmaland- UI Kit (Startup)"
},
{
"key": "PJHgFt29Lyo3JwMKxa5Tsm",
"name": "04_DailyUI_Video_Landing_Website"
},
{
"key": "RNRNDiF6gFcTCi6wJncvgv",
"name": "JackCreative"
},
{
"key": "BfBzvqu4VK53iSD5fbKNAo",
"name": "Intirior Architecture web ui kit"
},
{
"key": "RKIYTIOCADVsASHNxZ5tr2",
"name": "Social Media Dashboard - UI Kit"
},
{
"key": "qFC0pVEHe9Toc2aJ2MgO32",
"name": "DevAgency - Web Ui Kits"
},
{
"key": "khWI1rrgwj5702NilEcha2",
"name": "Sydney Oasis Hotel Websites"
},
{
"key": "5CZLD5lcxxRQNE1QWjqbmP",
"name": "UXFlow Web Kit"
},
{
"key": "dvPWtG7KaEWr895iCI0Ioy",
"name": "LOOMI"
},
{
"key": "5R9tevOwnk4iJzU3jEjg0q",
"name": "Landing UI Kit"
},
{
"key": "oyHlh6eh7TjxYhCUbFTvBS",
"name": "Jobhuntly - Job Board & Portal UI Kit"
},
{
"key": "G4mWQN0IWGkAKpD7Ga0bG3",
"name": "Core - Dashboard Builder"
},
{
"key": "Sarco9c50gDttu37szmurE",
"name": "Webflew Agency UI Kit"
},
{
"key": "x3g1FivshKeZ9PwccE7w3w",
"name": "Core - Dashboard Builder"
},
{
"key": "fsufV596UmcNyM8yfCYlAr",
"name": "Eco -Ecommerce Analytics Admin Dashboard"
},
{
"key": "s5KbowY6N6M4IkjHbgLjOc",
"name": "Figmaland-UI MAX ( ui8 )"
},
{
"key": "ms5OYBa3fRlDwRmSLWWorY",
"name": "Online Shop UI Kit"
},
{
"key": "pxsKzhDM8UL8oTSB4hUpOZ",
"name": "saascuy"
},
{
"key": "EKp3ZDo2A3kDp88DMvFqte",
"name": "Havoc Agency UI Kit"
},
{
"key": "yfsZXkLQbiWwQW9C2fwyDW",
"name": "UI KIT Desktop - Froots"
},
{
"key": "V6qWYeL6Hr5QA5Jz9rDmc7",
"name": "Grocery Delivery Landing Page"
},
{
"key": "m7bMqyeFaaO8XG8JqZYUu2",
"name": "AppStarter"
},
{
"key": "R0U9H8KEfOJdYPVZRMmLK6",
"name": "AppStarter (Wireframe)"
},
{
"key": "qhPf33kALID79IthiURFfK",
"name": "AppStarter Sample"
},
{
"key": "4lPiQwfUnlIh2cRvqFabSn",
"name": "AppStarter Sample (Wireframe)"
},
{
"key": "8Yk0Nw1JK1mLGBmAIhAVXR",
"name": "Modularity"
},
{
"key": "AcNy87P0xlqDvkeeBqrQpO",
"name": "Rybble TM"
},
{
"key": "L36XI3mBCDOi4IPN0d96wT",
"name": "UI KIT Desktop - Froots"
},
{
"key": "aSoBMXGcW9HxhyYpYGPxG1",
"name": "AppStarter"
},
{
"key": "ZqXrYPRqcVCWM9bwrlTKnd",
"name": "AppStarter (Wireframe)"
},
{
"key": "EffYROARIAH0I2PB3oy1HG",
"name": "AppStarter Sample"
},
{
"key": "zzWXoSvmdRvo4TmrAdqjXl",
"name": "AppStarter Sample (Wireframe)"
},
{
"key": "GgDyX8yYgCNzhMUNsPTBSH",
"name": "Rybble TM"
},
{
"key": "yIhPCq93LSUkzrJUVQjU1r",
"name": "Omega"
},
{
"key": "SYINzgEkzGIwZF15AvuDcn",
"name": "Login_page_2020"
},
{
"key": "crK1Yhtws6yWkBKcN1OCqB",
"name": "Kovid Flew"
},
{
"key": "byZYVoOiuEEtSMjH7JxcQO",
"name": "Elemento-UI-Kit"
},
{
"key": "dM5zUotUlacnEPU9Oo0RcJ",
"name": "Sketch File"
},
{
"key": "pEKy0RBAp93TLIDlnoTsFi",
"name": "LIGHT:DESKTOP - Premise Landing Page Wireframe Kit - Jamie Syke"
},
{
"key": "RCAZWKHkrBzwikzpBCebMz",
"name": "DARK:DESKTOP - Premise Landing Page Wireframe Kit - Jamie Syke"
},
{
"key": "IGfS4r69yANQazOxLSjnyQ",
"name": "yoyolabs-Limitless-for-Web-file"
}
]

View File

@@ -2,7 +2,8 @@
{ {
"W": "W1", "W": "W1",
"name": "Saascuy - Saas Landing Page UI KIT", "name": "Saascuy - Saas Landing Page UI KIT",
"fig_stem": "saascuy", "kind": "fig",
"source_stem": "saascuy",
"matched": "saascuy", "matched": "saascuy",
"key": "pxsKzhDM8UL8oTSB4hUpOZ", "key": "pxsKzhDM8UL8oTSB4hUpOZ",
"score": 1.0 "score": 1.0
@@ -10,15 +11,35 @@
{ {
"W": "W10", "W": "W10",
"name": "Havoc Agency UI Kit", "name": "Havoc Agency UI Kit",
"fig_stem": "Havoc Agency UI Kit", "kind": "fig",
"source_stem": "Havoc Agency UI Kit",
"matched": "Havoc Agency UI Kit", "matched": "Havoc Agency UI Kit",
"key": "EKp3ZDo2A3kDp88DMvFqte", "key": "EKp3ZDo2A3kDp88DMvFqte",
"score": 1.0 "score": 1.0
}, },
{
"W": "W11",
"name": "Limitless for Web",
"kind": "sketch",
"source_stem": "yoyolabs-Limitless-for-Web-file",
"matched": "yoyolabs-Limitless-for-Web-file",
"key": "IGfS4r69yANQazOxLSjnyQ",
"score": 1.0
},
{
"W": "W12",
"name": "Premise - Website and Landing Page Wireframe Kit - Desktop",
"kind": "sketch",
"source_stem": "DARK:DESKTOP - Premise Landing Page Wireframe Kit - Jamie Syke",
"matched": "DARK:DESKTOP - Premise Landing Page Wireframe Kit - Jamie Syke",
"key": "RCAZWKHkrBzwikzpBCebMz",
"score": 1.0
},
{ {
"W": "W13", "W": "W13",
"name": "Premium Online Shop UI Kit & Dashboard", "name": "Premium Online Shop UI Kit & Dashboard",
"fig_stem": "Online Shop UI Kit", "kind": "fig",
"source_stem": "Online Shop UI Kit",
"matched": "Online Shop UI Kit", "matched": "Online Shop UI Kit",
"key": "ms5OYBa3fRlDwRmSLWWorY", "key": "ms5OYBa3fRlDwRmSLWWorY",
"score": 1.0 "score": 1.0
@@ -26,31 +47,71 @@
{ {
"W": "W14", "W": "W14",
"name": "Ui Max", "name": "Ui Max",
"fig_stem": "Figmaland-UI MAX ( ui8 )", "kind": "fig",
"source_stem": "Figmaland-UI MAX ( ui8 )",
"matched": "Figmaland-UI MAX ( ui8 )", "matched": "Figmaland-UI MAX ( ui8 )",
"key": "s5KbowY6N6M4IkjHbgLjOc", "key": "s5KbowY6N6M4IkjHbgLjOc",
"score": 1.0 "score": 1.0
}, },
{
"W": "W15",
"name": "BelloBlue Fashion + Delivery Web App",
"kind": "sketch",
"source_stem": "Sketch File",
"matched": "Sketch File",
"key": "dM5zUotUlacnEPU9Oo0RcJ",
"score": 1.0
},
{ {
"W": "W16", "W": "W16",
"name": "Eco -Ecommerce Analytics Admin Dashboard Kit", "name": "Eco -Ecommerce Analytics Admin Dashboard Kit",
"fig_stem": "Eco -Ecommerce Analytics Admin Dashboard", "kind": "fig",
"source_stem": "Eco -Ecommerce Analytics Admin Dashboard",
"matched": "Eco -Ecommerce Analytics Admin Dashboard", "matched": "Eco -Ecommerce Analytics Admin Dashboard",
"key": "fsufV596UmcNyM8yfCYlAr", "key": "fsufV596UmcNyM8yfCYlAr",
"score": 1.0 "score": 1.0
}, },
{
"W": "W18",
"name": "Elemento UI Kit",
"kind": "sketch",
"source_stem": "Elemento-UI-Kit",
"matched": "Elemento-UI-Kit",
"key": "byZYVoOiuEEtSMjH7JxcQO",
"score": 1.0
},
{ {
"W": "W2", "W": "W2",
"name": "Core Dashboard Builder", "name": "Core Dashboard Builder",
"fig_stem": "Core - Dashboard Builder", "kind": "fig",
"source_stem": "Core - Dashboard Builder",
"matched": "Core - Dashboard Builder", "matched": "Core - Dashboard Builder",
"key": "G4mWQN0IWGkAKpD7Ga0bG3", "key": "G4mWQN0IWGkAKpD7Ga0bG3",
"score": 1.0 "score": 1.0
}, },
{
"W": "W20",
"name": "Kovid Flew - Coronavirus Awareness",
"kind": "sketch",
"source_stem": "Kovid Flew",
"matched": "Kovid Flew",
"key": "crK1Yhtws6yWkBKcN1OCqB",
"score": 1.0
},
{
"W": "W21",
"name": "Landing Page UI kit fully compatible",
"kind": "sketch",
"source_stem": "Login_page_2020",
"matched": "Login_page_2020",
"key": "SYINzgEkzGIwZF15AvuDcn",
"score": 1.0
},
{ {
"W": "W24", "W": "W24",
"name": "Webflew Agency Template UI Kit", "name": "Webflew Agency Template UI Kit",
"fig_stem": "Webflew Agency UI Kit", "kind": "fig",
"source_stem": "Webflew Agency UI Kit",
"matched": "Webflew Agency UI Kit", "matched": "Webflew Agency UI Kit",
"key": "Sarco9c50gDttu37szmurE", "key": "Sarco9c50gDttu37szmurE",
"score": 1.0 "score": 1.0
@@ -58,7 +119,8 @@
{ {
"W": "W25", "W": "W25",
"name": "Core Dashboard Builder", "name": "Core Dashboard Builder",
"fig_stem": "Core - Dashboard Builder", "kind": "fig",
"source_stem": "Core - Dashboard Builder",
"matched": "Core - Dashboard Builder", "matched": "Core - Dashboard Builder",
"key": "x3g1FivshKeZ9PwccE7w3w", "key": "x3g1FivshKeZ9PwccE7w3w",
"score": 1.0 "score": 1.0
@@ -66,15 +128,26 @@
{ {
"W": "W26", "W": "W26",
"name": "Jobhuntly - Job Board & Portal UI Kit", "name": "Jobhuntly - Job Board & Portal UI Kit",
"fig_stem": "Jobhuntly - Job Board & Portal UI Kit", "kind": "fig",
"source_stem": "Jobhuntly - Job Board & Portal UI Kit",
"matched": "Jobhuntly - Job Board & Portal UI Kit", "matched": "Jobhuntly - Job Board & Portal UI Kit",
"key": "oyHlh6eh7TjxYhCUbFTvBS", "key": "oyHlh6eh7TjxYhCUbFTvBS",
"score": 1.0 "score": 1.0
}, },
{
"W": "W27",
"name": "Omega - Landing Page Design Template",
"kind": "sketch",
"source_stem": "Omega",
"matched": "Omega",
"key": "yIhPCq93LSUkzrJUVQjU1r",
"score": 1.0
},
{ {
"W": "W28", "W": "W28",
"name": "Finity - Landing Page Template", "name": "Finity - Landing Page Template",
"fig_stem": "Landing UI Kit", "kind": "fig",
"source_stem": "Landing UI Kit",
"matched": "Landing UI Kit", "matched": "Landing UI Kit",
"key": "5R9tevOwnk4iJzU3jEjg0q", "key": "5R9tevOwnk4iJzU3jEjg0q",
"score": 1.0 "score": 1.0
@@ -82,7 +155,8 @@
{ {
"W": "W29", "W": "W29",
"name": "Loomi", "name": "Loomi",
"fig_stem": "LOOMI", "kind": "fig",
"source_stem": "LOOMI",
"matched": "LOOMI", "matched": "LOOMI",
"key": "dvPWtG7KaEWr895iCI0Ioy", "key": "dvPWtG7KaEWr895iCI0Ioy",
"score": 1.0 "score": 1.0
@@ -90,15 +164,26 @@
{ {
"W": "W3", "W": "W3",
"name": "UXFlow Web Kit Design", "name": "UXFlow Web Kit Design",
"fig_stem": "UXFlow Web Kit", "kind": "fig",
"source_stem": "UXFlow Web Kit",
"matched": "UXFlow Web Kit", "matched": "UXFlow Web Kit",
"key": "5CZLD5lcxxRQNE1QWjqbmP", "key": "5CZLD5lcxxRQNE1QWjqbmP",
"score": 1.0 "score": 1.0
}, },
{
"W": "W30",
"name": "Rybble TM",
"kind": "sketch",
"source_stem": "Rybble TM",
"matched": "Rybble TM",
"key": "AcNy87P0xlqDvkeeBqrQpO",
"score": 1.0
},
{ {
"W": "W31", "W": "W31",
"name": "Sydney Oasis Hotel - Websites Template", "name": "Sydney Oasis Hotel - Websites Template",
"fig_stem": "Sydney Oasis Hotel Websites", "kind": "fig",
"source_stem": "Sydney Oasis Hotel Websites",
"matched": "Sydney Oasis Hotel Websites", "matched": "Sydney Oasis Hotel Websites",
"key": "khWI1rrgwj5702NilEcha2", "key": "khWI1rrgwj5702NilEcha2",
"score": 1.0 "score": 1.0
@@ -106,7 +191,8 @@
{ {
"W": "W32", "W": "W32",
"name": "DevAgency - Web Ui Kits", "name": "DevAgency - Web Ui Kits",
"fig_stem": "DevAgency - Web Ui Kits", "kind": "fig",
"source_stem": "DevAgency - Web Ui Kits",
"matched": "DevAgency - Web Ui Kits", "matched": "DevAgency - Web Ui Kits",
"key": "qFC0pVEHe9Toc2aJ2MgO32", "key": "qFC0pVEHe9Toc2aJ2MgO32",
"score": 1.0 "score": 1.0
@@ -114,7 +200,8 @@
{ {
"W": "W33", "W": "W33",
"name": "Insight - Dashboard UI Kit", "name": "Insight - Dashboard UI Kit",
"fig_stem": "Social Media Dashboard - UI Kit", "kind": "fig",
"source_stem": "Social Media Dashboard - UI Kit",
"matched": "Social Media Dashboard - UI Kit", "matched": "Social Media Dashboard - UI Kit",
"key": "RKIYTIOCADVsASHNxZ5tr2", "key": "RKIYTIOCADVsASHNxZ5tr2",
"score": 1.0 "score": 1.0
@@ -122,7 +209,8 @@
{ {
"W": "W34", "W": "W34",
"name": "Intirior Architecture web ui kit", "name": "Intirior Architecture web ui kit",
"fig_stem": "Intirior Architecture web ui kit", "kind": "fig",
"source_stem": "Intirior Architecture web ui kit",
"matched": "Intirior Architecture web ui kit", "matched": "Intirior Architecture web ui kit",
"key": "BfBzvqu4VK53iSD5fbKNAo", "key": "BfBzvqu4VK53iSD5fbKNAo",
"score": 1.0 "score": 1.0
@@ -130,15 +218,26 @@
{ {
"W": "W35", "W": "W35",
"name": "JackCreative Personal Portfolio Website Design", "name": "JackCreative Personal Portfolio Website Design",
"fig_stem": "JackCreative", "kind": "fig",
"source_stem": "JackCreative",
"matched": "JackCreative", "matched": "JackCreative",
"key": "RNRNDiF6gFcTCi6wJncvgv", "key": "RNRNDiF6gFcTCi6wJncvgv",
"score": 1.0 "score": 1.0
}, },
{
"W": "W36",
"name": "AppStarter UI Kit",
"kind": "sketch",
"source_stem": "AppStarter Sample (Wireframe)",
"matched": "AppStarter Sample (Wireframe)",
"key": "4lPiQwfUnlIh2cRvqFabSn",
"score": 1.0
},
{ {
"W": "W37", "W": "W37",
"name": "Daily UI Starter Pages - A ready-made UI Kits", "name": "Daily UI Starter Pages - A ready-made UI Kits",
"fig_stem": "04_DailyUI_Video_Landing_Website", "kind": "fig",
"source_stem": "04_DailyUI_Video_Landing_Website",
"matched": "04_DailyUI_Video_Landing_Website", "matched": "04_DailyUI_Video_Landing_Website",
"key": "PJHgFt29Lyo3JwMKxa5Tsm", "key": "PJHgFt29Lyo3JwMKxa5Tsm",
"score": 1.0 "score": 1.0
@@ -146,15 +245,26 @@
{ {
"W": "W38", "W": "W38",
"name": "Figmaland - Startup Ui Kit", "name": "Figmaland - Startup Ui Kit",
"fig_stem": "Figmaland- UI Kit (Startup)", "kind": "fig",
"source_stem": "Figmaland- UI Kit (Startup)",
"matched": "Figmaland- UI Kit (Startup)", "matched": "Figmaland- UI Kit (Startup)",
"key": "fL1KqwIS3OmHCsUwhgJusG", "key": "fL1KqwIS3OmHCsUwhgJusG",
"score": 1.0 "score": 1.0
}, },
{
"W": "W4",
"name": "UI KIT Grocery Store",
"kind": "sketch",
"source_stem": "UI KIT Desktop - Froots",
"matched": "UI KIT Desktop - Froots",
"key": "yfsZXkLQbiWwQW9C2fwyDW",
"score": 1.0
},
{ {
"W": "W40", "W": "W40",
"name": "IOTASK UI Kit", "name": "IOTASK UI Kit",
"fig_stem": "iotask", "kind": "fig",
"source_stem": "iotask",
"matched": "iotask", "matched": "iotask",
"key": "uAcopfnDXakv7l5Jr6sMqG", "key": "uAcopfnDXakv7l5Jr6sMqG",
"score": 1.0 "score": 1.0
@@ -162,7 +272,8 @@
{ {
"W": "W41", "W": "W41",
"name": "Master Flow - Responsive Template for Figma", "name": "Master Flow - Responsive Template for Figma",
"fig_stem": "MasterFlow_UI_Kit", "kind": "fig",
"source_stem": "MasterFlow_UI_Kit",
"matched": "MasterFlow_UI_Kit", "matched": "MasterFlow_UI_Kit",
"key": "4OTPxx5sgN8eFJ3joudoVH", "key": "4OTPxx5sgN8eFJ3joudoVH",
"score": 1.0 "score": 1.0
@@ -170,15 +281,26 @@
{ {
"W": "W43", "W": "W43",
"name": "Modularity Web Design System for Figma", "name": "Modularity Web Design System for Figma",
"fig_stem": "Modularity", "kind": "fig",
"source_stem": "Modularity",
"matched": "Modularity", "matched": "Modularity",
"key": "huDsMAoVThpYnGAU9j8WVB", "key": "huDsMAoVThpYnGAU9j8WVB",
"score": 1.0 "score": 1.0
}, },
{
"W": "W44",
"name": "Modularity Web Design System for Sketch",
"kind": "sketch",
"source_stem": "Modularity",
"matched": "Modularity",
"key": "8Yk0Nw1JK1mLGBmAIhAVXR",
"score": 1.0
},
{ {
"W": "W45", "W": "W45",
"name": "Wiredunk - Landing Page Template for Multipurposes", "name": "Wiredunk - Landing Page Template for Multipurposes",
"fig_stem": "Wiredunk_Wireframe", "kind": "fig",
"source_stem": "Wiredunk_Wireframe",
"matched": "Wiredunk_Wireframe", "matched": "Wiredunk_Wireframe",
"key": "oZ7a2aFNZ21bg128ixnB3k", "key": "oZ7a2aFNZ21bg128ixnB3k",
"score": 1.0 "score": 1.0
@@ -186,7 +308,8 @@
{ {
"W": "W46", "W": "W46",
"name": "agency website template", "name": "agency website template",
"fig_stem": "3 template Agency", "kind": "fig",
"source_stem": "3 template Agency",
"matched": "3 template Agency", "matched": "3 template Agency",
"key": "sHmAQQxmvRTIxOg8OgQQFG", "key": "sHmAQQxmvRTIxOg8OgQQFG",
"score": 1.0 "score": 1.0
@@ -194,7 +317,8 @@
{ {
"W": "W47", "W": "W47",
"name": "Estatery - Real Estate SaaS Web UI Kit", "name": "Estatery - Real Estate SaaS Web UI Kit",
"fig_stem": "Real Estate SaaS Kit & Dashboard (UI8)", "kind": "fig",
"source_stem": "Real Estate SaaS Kit & Dashboard (UI8)",
"matched": "Real Estate SaaS Kit & Dashboard (UI8)", "matched": "Real Estate SaaS Kit & Dashboard (UI8)",
"key": "Suvu5K5DSKPngkMKRb01MK", "key": "Suvu5K5DSKPngkMKRb01MK",
"score": 1.0 "score": 1.0
@@ -202,7 +326,8 @@
{ {
"W": "W48", "W": "W48",
"name": "LANDINGKUY - Landing Page Design Templates", "name": "LANDINGKUY - Landing Page Design Templates",
"fig_stem": "LANDINGKUY - Landing Page Design", "kind": "fig",
"source_stem": "LANDINGKUY - Landing Page Design",
"matched": "LANDINGKUY - Landing Page Design", "matched": "LANDINGKUY - Landing Page Design",
"key": "df0oLsZta06a79s5iepJdF", "key": "df0oLsZta06a79s5iepJdF",
"score": 1.0 "score": 1.0
@@ -210,7 +335,8 @@
{ {
"W": "W5", "W": "W5",
"name": "Wiloa 2.0 - Landing Page UI-Kit", "name": "Wiloa 2.0 - Landing Page UI-Kit",
"fig_stem": "WILOA - HOTEL", "kind": "fig",
"source_stem": "WILOA - HOTEL",
"matched": "WILOA - HOTEL", "matched": "WILOA - HOTEL",
"key": "7C3QNOG6FhBRguT3nQ3dzf", "key": "7C3QNOG6FhBRguT3nQ3dzf",
"score": 1.0 "score": 1.0
@@ -218,7 +344,8 @@
{ {
"W": "W51", "W": "W51",
"name": "Quickr Design System", "name": "Quickr Design System",
"fig_stem": "Quicker Design system", "kind": "fig",
"source_stem": "Quicker Design system",
"matched": "Quicker Design system", "matched": "Quicker Design system",
"key": "KtGIx2vrYNtApMiPYCTiiB", "key": "KtGIx2vrYNtApMiPYCTiiB",
"score": 1.0 "score": 1.0
@@ -226,7 +353,8 @@
{ {
"W": "W52", "W": "W52",
"name": "RealStatic - Real State Website Design", "name": "RealStatic - Real State Website Design",
"fig_stem": "Ui8_RealStatic_Static Mania", "kind": "fig",
"source_stem": "Ui8_RealStatic_Static Mania",
"matched": "Ui8_RealStatic_Static Mania", "matched": "Ui8_RealStatic_Static Mania",
"key": "U4YDJ7B0Sefem9r8LiEs8b", "key": "U4YDJ7B0Sefem9r8LiEs8b",
"score": 1.0 "score": 1.0
@@ -234,7 +362,8 @@
{ {
"W": "W53", "W": "W53",
"name": "Skill Shoot - Online course website and responsive uikit", "name": "Skill Shoot - Online course website and responsive uikit",
"fig_stem": "Aset - skill Shoot", "kind": "fig",
"source_stem": "Aset - skill Shoot",
"matched": "Aset - skill Shoot", "matched": "Aset - skill Shoot",
"key": "pMjAEiLKAFE57eaI4f4vva", "key": "pMjAEiLKAFE57eaI4f4vva",
"score": 1.0 "score": 1.0
@@ -242,7 +371,8 @@
{ {
"W": "W54", "W": "W54",
"name": "GetPay - 6 Unique Finance Landing Pages", "name": "GetPay - 6 Unique Finance Landing Pages",
"fig_stem": "GETPAY - FINANCE TEMPLATES DESIGN", "kind": "fig",
"source_stem": "GETPAY - FINANCE TEMPLATES DESIGN",
"matched": "GETPAY - FINANCE TEMPLATES DESIGN", "matched": "GETPAY - FINANCE TEMPLATES DESIGN",
"key": "vcb4bLF79NTpybgXvAtkNM", "key": "vcb4bLF79NTpybgXvAtkNM",
"score": 1.0 "score": 1.0
@@ -250,7 +380,8 @@
{ {
"W": "W55", "W": "W55",
"name": "Fecca - Landing Page UI Kit (Figma)", "name": "Fecca - Landing Page UI Kit (Figma)",
"fig_stem": "Fecca", "kind": "fig",
"source_stem": "Fecca",
"matched": "Fecca", "matched": "Fecca",
"key": "IpdxPbiWuGZQpr3aNXsVpC", "key": "IpdxPbiWuGZQpr3aNXsVpC",
"score": 1.0 "score": 1.0
@@ -258,7 +389,8 @@
{ {
"W": "W56", "W": "W56",
"name": "Orabel Web UI Kit", "name": "Orabel Web UI Kit",
"fig_stem": "01 Home - Orabel Web UI Kit", "kind": "fig",
"source_stem": "01 Home - Orabel Web UI Kit",
"matched": "01 Home - Orabel Web UI Kit", "matched": "01 Home - Orabel Web UI Kit",
"key": "IoQBzPjHw51WjFKL52kJKN", "key": "IoQBzPjHw51WjFKL52kJKN",
"score": 1.0 "score": 1.0
@@ -266,7 +398,8 @@
{ {
"W": "W6", "W": "W6",
"name": "AKASHA Pages Building Kit", "name": "AKASHA Pages Building Kit",
"fig_stem": "AKASHA-PAGEBUILDING-KIT", "kind": "fig",
"source_stem": "AKASHA-PAGEBUILDING-KIT",
"matched": "AKASHA-PAGEBUILDING-KIT", "matched": "AKASHA-PAGEBUILDING-KIT",
"key": "LA2daTQaigGkMUUNgPr6fp", "key": "LA2daTQaigGkMUUNgPr6fp",
"score": 1.0 "score": 1.0
@@ -274,9 +407,19 @@
{ {
"W": "W7", "W": "W7",
"name": "Bright Kit Web Layouts", "name": "Bright Kit Web Layouts",
"fig_stem": "Bright Kit", "kind": "fig",
"source_stem": "Bright Kit",
"matched": "Bright Kit", "matched": "Bright Kit",
"key": "CLZepne3voPYx198q3wUHO", "key": "CLZepne3voPYx198q3wUHO",
"score": 1.0 "score": 1.0
},
{
"W": "W9",
"name": "Fresh Grocery - Landing Page Design Template",
"kind": "sketch",
"source_stem": "Grocery Delivery Landing Page",
"matched": "Grocery Delivery Landing Page",
"key": "V6qWYeL6Hr5QA5Jz9rDmc7",
"score": 1.0
} }
] ]

View File

@@ -35,18 +35,17 @@ def main():
sys.exit(1) sys.exit(1)
figma_files = json.loads(figma_files_path.read_text()) # list of {key, name, ...} figma_files = json.loads(figma_files_path.read_text()) # list of {key, name, ...}
# for each W template that has fig, find matching figma file # Match each template (fig preferred, else sketch) against cloud files
matches = [] matches = []
used_keys = set() used_keys = set()
for t in manifest['templates']: for t in manifest['templates']:
if not t['fig']: continue source_files = t['fig'] if t['fig'] else t['sketch']
# use the .fig file's stem as match target (closer than archive name) if not source_files: continue
targets = [Path(f).stem for f in t['fig']] kind = 'fig' if t['fig'] else 'sketch'
# add archive stem as backup targets = [Path(f).stem for f in source_files]
if t.get('archive'): if t.get('archive'):
targets.append(Path(t['archive']).stem) targets.append(Path(t['archive']).stem)
targets.append(t['name']) targets.append(t['name'])
# try each target
best_overall = (0, None) best_overall = (0, None)
for tgt in targets: for tgt in targets:
score, cand = best_match(tgt, [f for f in figma_files if f['key'] not in used_keys]) score, cand = best_match(tgt, [f for f in figma_files if f['key'] not in used_keys])
@@ -55,15 +54,16 @@ def main():
if score > 0.95: if score > 0.95:
break break
score, cand = best_overall score, cand = best_overall
stem = Path(source_files[0]).stem
if cand and score >= 0.6: if cand and score >= 0.6:
used_keys.add(cand['key']) used_keys.add(cand['key'])
matches.append({ matches.append({
'W': t['id'], 'name': t['name'], 'fig_stem': Path(t['fig'][0]).stem if t['fig'] else None, 'W': t['id'], 'name': t['name'], 'kind': kind, 'source_stem': stem,
'matched': cand['name'], 'key': cand['key'], 'score': round(score, 3) 'matched': cand['name'], 'key': cand['key'], 'score': round(score, 3)
}) })
else: else:
matches.append({ matches.append({
'W': t['id'], 'name': t['name'], 'fig_stem': Path(t['fig'][0]).stem if t['fig'] else None, 'W': t['id'], 'name': t['name'], 'kind': kind, 'source_stem': stem,
'matched': None, 'best_score': round(best_overall[0], 3) if cand else 0, 'matched': None, 'best_score': round(best_overall[0], 3) if cand else 0,
'best_candidate': cand['name'] if cand else None 'best_candidate': cand['name'] if cand else None
}) })
@@ -83,17 +83,21 @@ def main():
# update banner with imported count # update banner with imported count
imported = sum(1 for t in data['templates'] if t['figma_key']) imported = sum(1 for t in data['templates'] if t['figma_key'])
fig_cnt = sum(1 for t in manifest['templates'] if t['fig'])
sketch_only_cnt = sum(1 for t in manifest['templates'] if not t['fig'] and t['sketch'])
data['imported_summary'] = ( data['imported_summary'] = (
f"✅ <b>{imported} 个 Figma 原生文件</b>已云端就位在你的 " f"✅ <b>{imported}/56 套</b>已云端就位在 "
f"<a href='https://www.figma.com/files/team/1304178887825899477/drafts' target='_blank'>Figma Drafts</a>" f"<a href='https://www.figma.com/files/team/1304178887825899477/drafts' target='_blank'>Figma Drafts</a>"
f"点卡片打开 modal 查看 iframe 实时投射 + 跳 Figma 编辑" f"{fig_cnt} 个 .fig 原生 + {sketch_only_cnt} 个 .sketch 经 Figma 转换)"
f"点卡片 → modal → iframe 实时投射。"
) )
data_path.write_text(json.dumps(data, ensure_ascii=False, indent=2)) data_path.write_text(json.dumps(data, ensure_ascii=False, indent=2))
# write match report # write match report
report = ROOT/'figma-match-report.json' report = ROOT/'figma-match-report.json'
report.write_text(json.dumps(matches, ensure_ascii=False, indent=2)) report.write_text(json.dumps(matches, ensure_ascii=False, indent=2))
print(f"Matched {imported}/{sum(1 for t in manifest['templates'] if t['fig'])} fig templates") total_matchable = sum(1 for t in manifest['templates'] if t['fig'] or t['sketch'])
print(f"Matched {imported}/{total_matchable} templates ({fig_cnt} fig + {sketch_only_cnt} sketch-only)")
print(f"Report: {report.relative_to(ROOT)}") print(f"Report: {report.relative_to(ROOT)}")
unmatched = [m for m in matches if not m.get('key')] unmatched = [m for m in matches if not m.get('key')]
if unmatched: if unmatched:

View File

@@ -69,8 +69,8 @@
"archive": "Limitless for Web.zip", "archive": "Limitless for Web.zip",
"archive_size_mb": 54.7, "archive_size_mb": 54.7,
"source_rel": "../extracted/W11", "source_rel": "../extracted/W11",
"figma_key": null, "figma_key": "IGfS4r69yANQazOxLSjnyQ",
"figma_url": null "figma_url": "https://www.figma.com/file/IGfS4r69yANQazOxLSjnyQ"
}, },
{ {
"id": "W12", "id": "W12",
@@ -92,8 +92,8 @@
"archive": "Premise - Website and Landing Page Wireframe Kit - Desktop.zip", "archive": "Premise - Website and Landing Page Wireframe Kit - Desktop.zip",
"archive_size_mb": 12.2, "archive_size_mb": 12.2,
"source_rel": "../extracted/W12", "source_rel": "../extracted/W12",
"figma_key": null, "figma_key": "RCAZWKHkrBzwikzpBCebMz",
"figma_url": null "figma_url": "https://www.figma.com/file/RCAZWKHkrBzwikzpBCebMz"
}, },
{ {
"id": "W13", "id": "W13",
@@ -161,8 +161,8 @@
"archive": "BelloBlue Fashion + Delivery Web App.zip", "archive": "BelloBlue Fashion + Delivery Web App.zip",
"archive_size_mb": 65.6, "archive_size_mb": 65.6,
"source_rel": "../extracted/W15", "source_rel": "../extracted/W15",
"figma_key": null, "figma_key": "dM5zUotUlacnEPU9Oo0RcJ",
"figma_url": null "figma_url": "https://www.figma.com/file/dM5zUotUlacnEPU9Oo0RcJ"
}, },
{ {
"id": "W16", "id": "W16",
@@ -235,8 +235,8 @@
"archive": "Elemento UI Kit.zip", "archive": "Elemento UI Kit.zip",
"archive_size_mb": 84.2, "archive_size_mb": 84.2,
"source_rel": "../extracted/W18", "source_rel": "../extracted/W18",
"figma_key": null, "figma_key": "byZYVoOiuEEtSMjH7JxcQO",
"figma_url": null "figma_url": "https://www.figma.com/file/byZYVoOiuEEtSMjH7JxcQO"
}, },
{ {
"id": "W19", "id": "W19",
@@ -298,8 +298,8 @@
"archive": "Kovid Flew - Coronavirus Awareness.zip", "archive": "Kovid Flew - Coronavirus Awareness.zip",
"archive_size_mb": 200.4, "archive_size_mb": 200.4,
"source_rel": "../extracted/W20", "source_rel": "../extracted/W20",
"figma_key": null, "figma_key": "crK1Yhtws6yWkBKcN1OCqB",
"figma_url": null "figma_url": "https://www.figma.com/file/crK1Yhtws6yWkBKcN1OCqB"
}, },
{ {
"id": "W21", "id": "W21",
@@ -320,8 +320,8 @@
"archive": "Landing Page UI kit fully compatible.zip", "archive": "Landing Page UI kit fully compatible.zip",
"archive_size_mb": 18.9, "archive_size_mb": 18.9,
"source_rel": "../extracted/W21", "source_rel": "../extracted/W21",
"figma_key": null, "figma_key": "SYINzgEkzGIwZF15AvuDcn",
"figma_url": null "figma_url": "https://www.figma.com/file/SYINzgEkzGIwZF15AvuDcn"
}, },
{ {
"id": "W22", "id": "W22",
@@ -461,8 +461,8 @@
"archive": "Omega - Landing Page Design Template.zip", "archive": "Omega - Landing Page Design Template.zip",
"archive_size_mb": 1542.5, "archive_size_mb": 1542.5,
"source_rel": "../extracted/W27", "source_rel": "../extracted/W27",
"figma_key": null, "figma_key": "yIhPCq93LSUkzrJUVQjU1r",
"figma_url": null "figma_url": "https://www.figma.com/file/yIhPCq93LSUkzrJUVQjU1r"
}, },
{ {
"id": "W28", "id": "W28",
@@ -553,8 +553,8 @@
"archive": "Rybble TM.zip", "archive": "Rybble TM.zip",
"archive_size_mb": 23.2, "archive_size_mb": 23.2,
"source_rel": "../extracted/W30", "source_rel": "../extracted/W30",
"figma_key": null, "figma_key": "AcNy87P0xlqDvkeeBqrQpO",
"figma_url": null "figma_url": "https://www.figma.com/file/AcNy87P0xlqDvkeeBqrQpO"
}, },
{ {
"id": "W31", "id": "W31",
@@ -689,8 +689,8 @@
"archive": "AppStarter UI Kit.zip", "archive": "AppStarter UI Kit.zip",
"archive_size_mb": 716.5, "archive_size_mb": 716.5,
"source_rel": "../extracted/W36", "source_rel": "../extracted/W36",
"figma_key": null, "figma_key": "4lPiQwfUnlIh2cRvqFabSn",
"figma_url": null "figma_url": "https://www.figma.com/file/4lPiQwfUnlIh2cRvqFabSn"
}, },
{ {
"id": "W37", "id": "W37",
@@ -780,8 +780,8 @@
"archive": "UI KIT Grocery Store.zip", "archive": "UI KIT Grocery Store.zip",
"archive_size_mb": 352.7, "archive_size_mb": 352.7,
"source_rel": "../extracted/W4", "source_rel": "../extracted/W4",
"figma_key": null, "figma_key": "yfsZXkLQbiWwQW9C2fwyDW",
"figma_url": null "figma_url": "https://www.figma.com/file/yfsZXkLQbiWwQW9C2fwyDW"
}, },
{ {
"id": "W40", "id": "W40",
@@ -898,8 +898,8 @@
"archive": "Modularity Web Design System for Sketch.zip", "archive": "Modularity Web Design System for Sketch.zip",
"archive_size_mb": 127.6, "archive_size_mb": 127.6,
"source_rel": "../extracted/W44", "source_rel": "../extracted/W44",
"figma_key": null, "figma_key": "8Yk0Nw1JK1mLGBmAIhAVXR",
"figma_url": null "figma_url": "https://www.figma.com/file/8Yk0Nw1JK1mLGBmAIhAVXR"
}, },
{ {
"id": "W45", "id": "W45",
@@ -1283,9 +1283,9 @@
"archive": "Fresh Grocery - Landing Page Design Template.zip", "archive": "Fresh Grocery - Landing Page Design Template.zip",
"archive_size_mb": 15.5, "archive_size_mb": 15.5,
"source_rel": "../extracted/W9", "source_rel": "../extracted/W9",
"figma_key": null, "figma_key": "V6qWYeL6Hr5QA5Jz9rDmc7",
"figma_url": null "figma_url": "https://www.figma.com/file/V6qWYeL6Hr5QA5Jz9rDmc7"
} }
], ],
"imported_summary": "✅ <b>35 个 Figma 原生文件</b>已云端就位在你的 <a href='https://www.figma.com/files/team/1304178887825899477/drafts' target='_blank'>Figma Drafts</a>。点卡片打开 modal 查看 iframe 实时投射 + 跳 Figma 编辑。" "imported_summary": "✅ <b>47/56 套</b>已云端就位在 <a href='https://www.figma.com/files/team/1304178887825899477/drafts' target='_blank'>Figma Drafts</a>35 个 .fig 原生 + 12 个 .sketch 经 Figma 转换)。点卡片 modal iframe 实时投射。"
} }