openfree commited on
Commit
b873a08
β€’
1 Parent(s): 5e82b1d

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +148 -78
app.py CHANGED
@@ -649,101 +649,171 @@ def get_user_spaces():
649
  vercel_deployments = get_vercel_deployments()
650
  actual_vercel_count = len(vercel_deployments) if vercel_deployments else 0
651
 
 
652
  html_content = f"""
653
- <div style='padding: 20px; background-color: #f5f5f5;'>
654
- <div style='margin-bottom: 20px;'>
655
- <h2 style='color: #333; margin: 0 0 5px 0;'>곡개 가러리(생성 Web/App) by MOUSE</h2>
656
- <p style='color: #666; margin: 0 0 15px 0; font-size: 0.9em;'>
657
- ν”„λ‘¬ν”„νŠΈλ§ŒμœΌλ‘œ λ‚˜λ§Œμ˜ μ›Ήμ„œλΉ„μŠ€λ₯Ό μ¦‰μ‹œ μƒμ„±ν•˜λŠ” MOUSE
658
- <a href='https://openfree-mouse.hf.space' target='_blank'
659
- style='color: #0084ff; text-decoration: none;'>
660
- https://openfree-mouse.hf.space
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
661
  </a>
662
- </p>
663
- <p style='color: #666; margin: 0;'>
 
 
 
 
 
 
 
 
664
  Found {actual_vercel_count} Vercel deployments and {len(user_spaces)} Hugging Face spaces<br>
665
  (Plus {top_best_count} featured items in Top Best section)
666
  </p>
667
  </div>
668
 
669
- <!-- Top Best -->
670
- <h3 style='color: #333; margin: 20px 0;'>πŸ† Top Best</h3>
671
- <div style='display: grid; grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); gap: 20px;'>
672
- {"".join(get_vercel_card(
673
- {"url": url["url"], "created": url["created"], "name": url["name"], "state": url["state"]},
674
- idx,
675
- is_top_best=True
676
- ) for idx, url in enumerate(TOP_BEST_URLS))}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
677
  </div>
678
-
679
- <!-- Vercel Deployments -->
680
  {f'''
681
- <h3 style='color: #333; margin: 20px 0;'>⚑ Vercel Deployments</h3>
682
- <div id="vercel-container" style='display: grid; grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); gap: 20px;'>
683
- {"".join(get_vercel_card(dep, idx) for idx, dep in enumerate(vercel_deployments))}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
684
  </div>
685
  ''' if vercel_deployments else ''}
686
-
687
- <!-- Hugging Face Spaces -->
688
- <h3 style='color: #333; margin: 20px 0;'>πŸ€— Hugging Face Spaces</h3>
689
- <div style='display: grid; grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); gap: 20px;'>
690
- {"".join(get_space_card(space, idx) for idx, space in enumerate(user_spaces))}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
691
  </div>
692
  </div>
693
 
 
694
  <script>
695
- document.addEventListener('DOMContentLoaded', function() {{
696
- // μ’‹μ•„μš” μƒνƒœ λ‘œλ“œ
697
- function loadLikes() {{
698
- const cards = document.querySelectorAll('.vercel-card');
699
- cards.forEach(card => {{
700
- const cardId = card.id;
701
- const likes = localStorage.getItem(cardId) || 0;
702
- card.querySelector('.like-count').textContent = likes;
703
- card.dataset.likes = likes;
704
- updateLikeButton(card, likes > 0);
705
- }});
706
- sortCards();
707
- }}
708
-
709
- // μ’‹μ•„μš” λ²„νŠΌ ν† κΈ€
710
- window.toggleLike = function(cardId) {{
711
- const card = document.getElementById(cardId);
712
- const likeCount = parseInt(localStorage.getItem(cardId) || 0);
713
- const newCount = likeCount > 0 ? 0 : 1;
714
-
715
- localStorage.setItem(cardId, newCount);
716
- card.querySelector('.like-count').textContent = newCount;
717
- card.dataset.likes = newCount;
718
- updateLikeButton(card, newCount > 0);
719
-
720
- sortCards();
721
- }}
722
-
723
- // μ’‹μ•„μš” λ²„νŠΌ μƒνƒœ μ—…λ°μ΄νŠΈ
724
- function updateLikeButton(card, isLiked) {{
725
- const button = card.querySelector('.like-button');
726
- button.textContent = isLiked ? '❀️' : '🀍';
727
- }}
728
-
729
- // μΉ΄λ“œ μ •λ ¬
730
- function sortCards() {{
731
- const container = document.getElementById('vercel-container');
732
- const cards = Array.from(container.children);
733
-
734
- cards.sort((a, b) => {{
735
- return parseInt(b.dataset.likes) - parseInt(a.dataset.likes);
736
- }});
737
-
738
- cards.forEach(card => container.appendChild(card));
739
- }}
740
-
741
- // 초기 λ‘œλ“œ
742
- loadLikes();
743
- }});
744
  </script>
745
  """
746
-
747
  return html_content
748
 
749
  except Exception as e:
 
649
  vercel_deployments = get_vercel_deployments()
650
  actual_vercel_count = len(vercel_deployments) if vercel_deployments else 0
651
 
652
+
653
  html_content = f"""
654
+ <div style='
655
+ min-height: 100vh;
656
+ background: linear-gradient(135deg, #f6f8ff 0%, #f0f4ff 100%);
657
+ background-image: url("data:image/svg+xml,%3Csvg width='100' height='20' viewBox='0 0 100 20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M21.184 20c.357-.13.72-.264 1.088-.402l1.768-.661C33.64 15.347 39.647 14 50 14c10.271 0 15.362 1.222 24.629 4.928.955.383 1.869.74 2.75 1.072h6.225c-2.51-.73-5.139-1.691-8.233-2.928C65.888 13.278 60.562 12 50 12c-10.626 0-16.855 1.397-26.66 5.063l-1.767.662c-2.475.923-4.66 1.674-6.724 2.275h6.335zm0-20C13.258 2.892 8.077 4 0 4V2c5.744 0 9.951-.574 14.85-2h6.334zM77.38 0C85.239 2.966 90.502 4 100 4V2c-6.842 0-11.386-.542-16.396-2h-6.225zM0 14c8.44 0 13.718-1.21 22.272-4.402l1.768-.661C33.64 5.347 39.647 4 50 4c10.271 0 15.362 1.222 24.629 4.928C84.112 12.722 89.438 14 100 14v-2c-10.271 0-15.362-1.222-24.629-4.928C65.888 3.278 60.562 2 50 2 39.374 2 33.145 3.397 23.34 7.063l-1.767.662C13.223 10.84 8.163 12 0 12v2z' fill='%23f0f0f0' fill-opacity='0.2' fill-rule='evenodd'/%3E%3C/svg%3E");
658
+ padding: 40px;
659
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;'>
660
+
661
+ <!-- 메인 헀더 -->
662
+ <div style='
663
+ background: rgba(255, 255, 255, 0.8);
664
+ border-radius: 20px;
665
+ padding: 30px;
666
+ margin-bottom: 40px;
667
+ box-shadow: 0 4px 20px rgba(0,0,0,0.05);
668
+ backdrop-filter: blur(10px);
669
+ border: 1px solid rgba(255,255,255,0.8);'>
670
+
671
+ <h2 style='
672
+ color: #2d2d2d;
673
+ margin: 0 0 15px 0;
674
+ font-size: 2em;
675
+ background: linear-gradient(45deg, #2d2d2d, #0084ff);
676
+ -webkit-background-clip: text;
677
+ -webkit-text-fill-color: transparent;'>
678
+ 곡개 가러리(생성 Web/App) by MOUSE
679
+ </h2>
680
+
681
+ <div style='
682
+ background: linear-gradient(45deg, #0084ff, #00a3ff);
683
+ border-radius: 10px;
684
+ padding: 15px;
685
+ margin: 20px 0;'>
686
+ <a href='https://openfree-mouse.hf.space'
687
+ target='_blank'
688
+ style='
689
+ color: white;
690
+ text-decoration: none;
691
+ font-size: 1.1em;
692
+ display: block;
693
+ text-align: center;'>
694
+ πŸš€ ν”„λ‘¬ν”„νŠΈλ§ŒμœΌλ‘œ λ‚˜λ§Œμ˜ μ›Ήμ„œλΉ„μŠ€λ₯Ό μ¦‰μ‹œ μƒμ„±ν•˜λŠ” MOUSE
695
  </a>
696
+ </div>
697
+
698
+ <p style='
699
+ color: #666;
700
+ margin: 0;
701
+ font-size: 0.9em;
702
+ text-align: center;
703
+ background: rgba(255,255,255,0.5);
704
+ padding: 10px;
705
+ border-radius: 10px;'>
706
  Found {actual_vercel_count} Vercel deployments and {len(user_spaces)} Hugging Face spaces<br>
707
  (Plus {top_best_count} featured items in Top Best section)
708
  </p>
709
  </div>
710
 
711
+ <!-- Top Best μ„Ήμ…˜ -->
712
+ <div class="section-container" style='
713
+ background: rgba(255, 255, 255, 0.4);
714
+ border-radius: 20px;
715
+ padding: 30px;
716
+ margin: 20px 0;
717
+ backdrop-filter: blur(10px);'>
718
+
719
+ <h3 style='
720
+ color: #2d2d2d;
721
+ margin: 0 0 20px 0;
722
+ padding: 15px 25px;
723
+ background: rgba(255,255,255,0.7);
724
+ border-radius: 15px;
725
+ box-shadow: 0 4px 15px rgba(0,0,0,0.05);
726
+ border-left: 5px solid #0084ff;
727
+ display: flex;
728
+ align-items: center;
729
+ gap: 10px;'>
730
+ <span style='font-size: 1.5em;'>πŸ†</span>
731
+ Top Best
732
+ </h3>
733
+
734
+ <div style='
735
+ display: grid;
736
+ grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
737
+ gap: 20px;'>
738
+ {"".join(get_vercel_card(
739
+ {"url": url["url"], "created": url["created"], "name": url["name"], "state": url["state"]},
740
+ idx,
741
+ is_top_best=True
742
+ ) for idx, url in enumerate(TOP_BEST_URLS))}
743
+ </div>
744
  </div>
745
+
746
+ <!-- Vercel Deployments μ„Ήμ…˜ -->
747
  {f'''
748
+ <div class="section-container" style='
749
+ background: rgba(255, 255, 255, 0.4);
750
+ border-radius: 20px;
751
+ padding: 30px;
752
+ margin: 20px 0;
753
+ backdrop-filter: blur(10px);'>
754
+
755
+ <h3 style='
756
+ color: #2d2d2d;
757
+ margin: 0 0 20px 0;
758
+ padding: 15px 25px;
759
+ background: rgba(255,255,255,0.7);
760
+ border-radius: 15px;
761
+ box-shadow: 0 4px 15px rgba(0,0,0,0.05);
762
+ border-left: 5px solid #00a3ff;
763
+ display: flex;
764
+ align-items: center;
765
+ gap: 10px;'>
766
+ <span style='font-size: 1.5em;'>⚑</span>
767
+ Vercel Deployments
768
+ </h3>
769
+
770
+ <div id="vercel-container" style='
771
+ display: grid;
772
+ grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
773
+ gap: 20px;'>
774
+ {"".join(get_vercel_card(dep, idx) for idx, dep in enumerate(vercel_deployments))}
775
+ </div>
776
  </div>
777
  ''' if vercel_deployments else ''}
778
+
779
+ <!-- Hugging Face Spaces μ„Ήμ…˜ -->
780
+ <div class="section-container" style='
781
+ background: rgba(255, 255, 255, 0.4);
782
+ border-radius: 20px;
783
+ padding: 30px;
784
+ margin: 20px 0;
785
+ backdrop-filter: blur(10px);'>
786
+
787
+ <h3 style='
788
+ color: #2d2d2d;
789
+ margin: 0 0 20px 0;
790
+ padding: 15px 25px;
791
+ background: rgba(255,255,255,0.7);
792
+ border-radius: 15px;
793
+ box-shadow: 0 4px 15px rgba(0,0,0,0.05);
794
+ border-left: 5px solid #ff6b6b;
795
+ display: flex;
796
+ align-items: center;
797
+ gap: 10px;'>
798
+ <span style='font-size: 1.5em;'>πŸ€—</span>
799
+ Hugging Face Spaces
800
+ </h3>
801
+
802
+ <div style='
803
+ display: grid;
804
+ grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
805
+ gap: 20px;'>
806
+ {"".join(get_space_card(space, idx) for idx, space in enumerate(user_spaces))}
807
+ </div>
808
  </div>
809
  </div>
810
 
811
+ <!-- κΈ°μ‘΄ JavaScript μ½”λ“œλŠ” κ·ΈλŒ€λ‘œ μœ μ§€ -->
812
  <script>
813
+ // ... (κΈ°μ‘΄ JavaScript μ½”λ“œ)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
814
  </script>
815
  """
816
+
817
  return html_content
818
 
819
  except Exception as e: