Boobs00 commited on
Commit
16dd4d1
·
verified ·
1 Parent(s): 8bcf7b6

Add 2 files

Browse files
Files changed (2) hide show
  1. index.html +276 -2
  2. prompts.txt +2 -1
index.html CHANGED
@@ -490,12 +490,153 @@
490
  .audio-controls.collapsed h3 span {
491
  display: none;
492
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
493
  </style>
494
  </head>
495
  <body>
496
  <!-- Audio Visualization -->
497
  <div class="audio-visualizer"></div>
498
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
499
  <!-- Audio Controls -->
500
  <div class="audio-controls">
501
  <h3>
@@ -627,7 +768,7 @@
627
  </audio>
628
 
629
  <script>
630
- // Audio Manager
631
  class AudioManager {
632
  constructor() {
633
  this.audioContext = new (window.AudioContext || window.webkitAudioContext)();
@@ -650,9 +791,16 @@
650
 
651
  this.dataArray = new Uint8Array(this.analyser.frequencyBinCount);
652
 
 
 
 
 
 
 
653
  this.initControls();
654
  this.startAudio();
655
  this.visualize();
 
656
  }
657
 
658
  initControls() {
@@ -664,16 +812,19 @@
664
  humVolume.addEventListener('input', () => {
665
  this.humAudio.volume = humVolume.value / 100;
666
  document.getElementById('hum-volume-value').textContent = `${humVolume.value}%`;
 
667
  });
668
 
669
  heartbeatVolume.addEventListener('input', () => {
670
  this.heartbeatAudio.volume = heartbeatVolume.value / 100;
671
  document.getElementById('heartbeat-volume-value').textContent = `${heartbeatVolume.value}%`;
 
672
  });
673
 
674
  thunderVolume.addEventListener('input', () => {
675
  this.thunderAudio.volume = thunderVolume.value / 100;
676
  document.getElementById('thunder-volume-value').textContent = `${thunderVolume.value}%`;
 
677
  });
678
 
679
  // Toggle buttons
@@ -681,8 +832,10 @@
681
  e.target.classList.toggle('active');
682
  if (e.target.classList.contains('active')) {
683
  this.humAudio.play();
 
684
  } else {
685
  this.humAudio.pause();
 
686
  }
687
  });
688
 
@@ -690,19 +843,140 @@
690
  e.target.classList.toggle('active');
691
  if (e.target.classList.contains('active')) {
692
  this.heartbeatAudio.play();
 
693
  } else {
694
  this.heartbeatAudio.pause();
 
695
  }
696
  });
697
 
698
  document.getElementById('toggle-thunder').addEventListener('click', (e) => {
699
  e.target.classList.toggle('active');
 
700
  });
701
 
702
  // Collapse/expand controls
703
  document.getElementById('toggle-audio-controls').addEventListener('click', () => {
704
  document.querySelector('.audio-controls').classList.toggle('collapsed');
705
  });
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
706
  }
707
 
708
  startAudio() {
@@ -1304,7 +1578,7 @@
1304
  new ParticleSystem(canvas);
1305
  }
1306
 
1307
- // Initialize Audio Manager
1308
  new AudioManager();
1309
 
1310
  // Recreate elements periodically for variety
 
490
  .audio-controls.collapsed h3 span {
491
  display: none;
492
  }
493
+
494
+ /* Pleasure Dial Styles */
495
+ .pleasure-dial-container {
496
+ position: fixed;
497
+ bottom: 20px;
498
+ left: 20px;
499
+ z-index: 1000;
500
+ background: rgba(15, 15, 26, 0.7);
501
+ border-radius: 8px;
502
+ padding: 15px;
503
+ backdrop-filter: blur(5px);
504
+ border: 1px solid rgba(56, 189, 248, 0.2);
505
+ transition: all 0.3s ease;
506
+ max-width: 300px;
507
+ }
508
+
509
+ .pleasure-dial-container:hover {
510
+ background: rgba(15, 15, 26, 0.9);
511
+ border-color: rgba(245, 158, 11, 0.3);
512
+ }
513
+
514
+ .pleasure-dial-container h3 {
515
+ color: var(--warm-amber);
516
+ margin-bottom: 15px;
517
+ font-family: 'Orbitron', sans-serif;
518
+ display: flex;
519
+ align-items: center;
520
+ justify-content: space-between;
521
+ }
522
+
523
+ .pleasure-dial-container h3 i {
524
+ margin-right: 8px;
525
+ }
526
+
527
+ .pleasure-dial {
528
+ width: 100%;
529
+ height: 8px;
530
+ -webkit-appearance: none;
531
+ background: linear-gradient(90deg, var(--cool-blue), var(--warm-amber), var(--electric-purple));
532
+ border-radius: 4px;
533
+ outline: none;
534
+ margin: 20px 0;
535
+ }
536
+
537
+ .pleasure-dial::-webkit-slider-thumb {
538
+ -webkit-appearance: none;
539
+ width: 24px;
540
+ height: 24px;
541
+ background: white;
542
+ border-radius: 50%;
543
+ cursor: pointer;
544
+ box-shadow: 0 0 10px rgba(245, 158, 11, 0.8);
545
+ border: 2px solid var(--warm-amber);
546
+ }
547
+
548
+ .pleasure-dial::-webkit-slider-thumb:hover {
549
+ box-shadow: 0 0 15px rgba(245, 158, 11, 1);
550
+ }
551
+
552
+ .pleasure-intensity {
553
+ display: flex;
554
+ justify-content: space-between;
555
+ margin-top: 5px;
556
+ color: rgba(224, 224, 255, 0.7);
557
+ font-size: 0.8rem;
558
+ }
559
+
560
+ .pleasure-value {
561
+ text-align: center;
562
+ font-family: 'Orbitron', sans-serif;
563
+ font-size: 1.2rem;
564
+ color: var(--warm-amber);
565
+ margin: 10px 0;
566
+ }
567
+
568
+ .haptic-toggle {
569
+ display: flex;
570
+ align-items: center;
571
+ justify-content: center;
572
+ margin-top: 15px;
573
+ }
574
+
575
+ .haptic-toggle button {
576
+ background: rgba(245, 158, 11, 0.1);
577
+ border: 1px solid rgba(245, 158, 11, 0.3);
578
+ color: var(--warm-amber);
579
+ padding: 8px 15px;
580
+ border-radius: 4px;
581
+ cursor: pointer;
582
+ font-size: 0.9rem;
583
+ transition: all 0.3s ease;
584
+ display: flex;
585
+ align-items: center;
586
+ }
587
+
588
+ .haptic-toggle button i {
589
+ margin-right: 8px;
590
+ }
591
+
592
+ .haptic-toggle button:hover {
593
+ background: rgba(245, 158, 11, 0.2);
594
+ }
595
+
596
+ .haptic-toggle button.active {
597
+ background: rgba(245, 158, 11, 0.3);
598
+ color: white;
599
+ }
600
+
601
+ /* Haptic feedback indicator */
602
+ .haptic-indicator {
603
+ position: absolute;
604
+ width: 100%;
605
+ height: 100%;
606
+ top: 0;
607
+ left: 0;
608
+ pointer-events: none;
609
+ opacity: 0;
610
+ background: radial-gradient(circle, rgba(245, 158, 11, 0.2) 0%, transparent 70%);
611
+ transition: opacity 0.3s ease;
612
+ }
613
+
614
+ .haptic-active .haptic-indicator {
615
+ opacity: 1;
616
+ }
617
  </style>
618
  </head>
619
  <body>
620
  <!-- Audio Visualization -->
621
  <div class="audio-visualizer"></div>
622
 
623
+ <!-- Pleasure Dial Controls -->
624
+ <div class="pleasure-dial-container">
625
+ <h3><i class="fas fa-sliders-h"></i> Pleasure Dial</h3>
626
+ <div class="pleasure-value" id="pleasure-value">50%</div>
627
+ <input type="range" id="pleasure-dial" class="pleasure-dial" min="0" max="100" value="50">
628
+ <div class="pleasure-intensity">
629
+ <span>Subtle</span>
630
+ <span>Intense</span>
631
+ </div>
632
+ <div class="haptic-toggle">
633
+ <button id="toggle-haptic">
634
+ <i class="fas fa-vibration"></i> Haptic Feedback
635
+ </button>
636
+ </div>
637
+ <div class="haptic-indicator"></div>
638
+ </div>
639
+
640
  <!-- Audio Controls -->
641
  <div class="audio-controls">
642
  <h3>
 
768
  </audio>
769
 
770
  <script>
771
+ // Enhanced Audio Manager with Pleasure Dial integration
772
  class AudioManager {
773
  constructor() {
774
  this.audioContext = new (window.AudioContext || window.webkitAudioContext)();
 
791
 
792
  this.dataArray = new Uint8Array(this.analyser.frequencyBinCount);
793
 
794
+ // Pleasure dial state
795
+ this.pleasureIntensity = 0.5; // 0-1 scale
796
+ this.hapticEnabled = false;
797
+ this.lastHapticTime = 0;
798
+ this.hapticInterval = 1000; // Start with slow pulses
799
+
800
  this.initControls();
801
  this.startAudio();
802
  this.visualize();
803
+ this.initHaptic();
804
  }
805
 
806
  initControls() {
 
812
  humVolume.addEventListener('input', () => {
813
  this.humAudio.volume = humVolume.value / 100;
814
  document.getElementById('hum-volume-value').textContent = `${humVolume.value}%`;
815
+ this.logInteraction('hum_volume_change', humVolume.value);
816
  });
817
 
818
  heartbeatVolume.addEventListener('input', () => {
819
  this.heartbeatAudio.volume = heartbeatVolume.value / 100;
820
  document.getElementById('heartbeat-volume-value').textContent = `${heartbeatVolume.value}%`;
821
+ this.logInteraction('heartbeat_volume_change', heartbeatVolume.value);
822
  });
823
 
824
  thunderVolume.addEventListener('input', () => {
825
  this.thunderAudio.volume = thunderVolume.value / 100;
826
  document.getElementById('thunder-volume-value').textContent = `${thunderVolume.value}%`;
827
+ this.logInteraction('thunder_volume_change', thunderVolume.value);
828
  });
829
 
830
  // Toggle buttons
 
832
  e.target.classList.toggle('active');
833
  if (e.target.classList.contains('active')) {
834
  this.humAudio.play();
835
+ this.logInteraction('hum_toggle', 'on');
836
  } else {
837
  this.humAudio.pause();
838
+ this.logInteraction('hum_toggle', 'off');
839
  }
840
  });
841
 
 
843
  e.target.classList.toggle('active');
844
  if (e.target.classList.contains('active')) {
845
  this.heartbeatAudio.play();
846
+ this.logInteraction('heartbeat_toggle', 'on');
847
  } else {
848
  this.heartbeatAudio.pause();
849
+ this.logInteraction('heartbeat_toggle', 'off');
850
  }
851
  });
852
 
853
  document.getElementById('toggle-thunder').addEventListener('click', (e) => {
854
  e.target.classList.toggle('active');
855
+ this.logInteraction('thunder_toggle', e.target.classList.contains('active') ? 'on' : 'off');
856
  });
857
 
858
  // Collapse/expand controls
859
  document.getElementById('toggle-audio-controls').addEventListener('click', () => {
860
  document.querySelector('.audio-controls').classList.toggle('collapsed');
861
  });
862
+
863
+ // Pleasure dial
864
+ const pleasureDial = document.getElementById('pleasure-dial');
865
+ const pleasureValue = document.getElementById('pleasure-value');
866
+
867
+ pleasureDial.addEventListener('input', () => {
868
+ this.pleasureIntensity = pleasureDial.value / 100;
869
+ pleasureValue.textContent = `${pleasureDial.value}%`;
870
+
871
+ // Update all parameters based on pleasure intensity
872
+ this.updatePleasureEffects();
873
+
874
+ // Log the interaction
875
+ this.logInteraction('pleasure_dial', pleasureDial.value);
876
+ });
877
+
878
+ // Haptic feedback toggle
879
+ document.getElementById('toggle-haptic').addEventListener('click', (e) => {
880
+ e.target.classList.toggle('active');
881
+ this.hapticEnabled = e.target.classList.contains('active');
882
+ document.querySelector('.pleasure-dial-container').classList.toggle('haptic-active');
883
+
884
+ if (this.hapticEnabled) {
885
+ this.triggerHapticFeedback();
886
+ this.logInteraction('haptic_feedback', 'enabled');
887
+ } else {
888
+ this.logInteraction('haptic_feedback', 'disabled');
889
+ }
890
+ });
891
+ }
892
+
893
+ updatePleasureEffects() {
894
+ // Update audio volumes
895
+ const baseVolume = 0.3 + (this.pleasureIntensity * 0.7);
896
+ this.humAudio.volume = baseVolume * 0.8;
897
+ this.heartbeatAudio.volume = baseVolume * 1.2;
898
+
899
+ // Update UI elements to reflect changes
900
+ document.getElementById('hum-volume').value = this.humAudio.volume * 100;
901
+ document.getElementById('heartbeat-volume').value = this.heartbeatAudio.volume * 100;
902
+ document.getElementById('hum-volume-value').textContent = `${Math.round(this.humAudio.volume * 100)}%`;
903
+ document.getElementById('heartbeat-volume-value').textContent = `${Math.round(this.heartbeatAudio.volume * 100)}%`;
904
+
905
+ // Update heartbeat speed (playback rate)
906
+ this.heartbeatAudio.playbackRate = 0.5 + (this.pleasureIntensity * 1.5);
907
+
908
+ // Update haptic pulse speed
909
+ this.hapticInterval = 1000 - (this.pleasureIntensity * 900); // 100ms to 1000ms
910
+
911
+ // Update visual intensity
912
+ this.updateVisualIntensity();
913
+ }
914
+
915
+ updateVisualIntensity() {
916
+ // Update CSS variables based on intensity
917
+ document.documentElement.style.setProperty('--cool-blue', `rgba(56, 189, 248, ${0.5 + this.pleasureIntensity * 0.5})`);
918
+ document.documentElement.style.setProperty('--warm-amber', `rgba(245, 158, 11, ${0.5 + this.pleasureIntensity * 0.5})`);
919
+
920
+ // Update pulse animation speed
921
+ const pulseElements = document.querySelectorAll('.pulse-glow, .neon-text');
922
+ pulseElements.forEach(el => {
923
+ el.style.animationDuration = `${6 - (this.pleasureIntensity * 4)}s`;
924
+ });
925
+ }
926
+
927
+ initHaptic() {
928
+ // Check for vibration API support
929
+ this.vibrationSupported = 'vibrate' in navigator;
930
+
931
+ if (!this.vibrationSupported) {
932
+ document.getElementById('toggle-haptic').disabled = true;
933
+ document.getElementById('toggle-haptic').title = "Haptic feedback not supported on this device";
934
+ }
935
+ }
936
+
937
+ triggerHapticFeedback() {
938
+ if (!this.hapticEnabled || !this.vibrationSupported) return;
939
+
940
+ // Calculate vibration pattern based on pleasure intensity
941
+ const duration = 50 + (this.pleasureIntensity * 100); // 50-150ms
942
+ const pattern = [duration, this.hapticInterval - duration];
943
+
944
+ // Start vibration
945
+ navigator.vibrate(pattern);
946
+
947
+ // Schedule next vibration
948
+ clearTimeout(this.hapticTimeout);
949
+ this.hapticTimeout = setTimeout(() => {
950
+ this.triggerHapticFeedback();
951
+ }, this.hapticInterval);
952
+
953
+ // Visual feedback
954
+ const indicator = document.querySelector('.haptic-indicator');
955
+ indicator.style.opacity = '1';
956
+ setTimeout(() => {
957
+ indicator.style.opacity = '0';
958
+ }, duration);
959
+ }
960
+
961
+ logInteraction(type, value) {
962
+ // In a real application, this would send data to your server
963
+ console.log(`Logged interaction: ${type}=${value}`);
964
+
965
+ // Simulate server logging
966
+ const logData = {
967
+ type: type,
968
+ value: value,
969
+ timestamp: new Date().toISOString(),
970
+ pleasureIntensity: this.pleasureIntensity,
971
+ userAgent: navigator.userAgent
972
+ };
973
+
974
+ // Here you would typically use fetch() to send to your backend
975
+ // fetch('/api/log-interaction', {
976
+ // method: 'POST',
977
+ // headers: { 'Content-Type': 'application/json' },
978
+ // body: JSON.stringify(logData)
979
+ // });
980
  }
981
 
982
  startAudio() {
 
1578
  new ParticleSystem(canvas);
1579
  }
1580
 
1581
+ // Initialize Audio Manager with Pleasure Dial
1582
  new AudioManager();
1583
 
1584
  // Recreate elements periodically for variety
prompts.txt CHANGED
@@ -2,4 +2,5 @@ Deepsite, generate a full‑stack web application scaffold using Next.js for the
2
  Refine the landing page: - Create a full‑screen hero with animated “electric currents” flowing across a dark grid background. - Implement a pulsating glow effect that mimics waves of tingling warmth radiating from the center. - Overlay the text “Welcome to Algorithmic Ecstasy” in neon gradient, fading in sync with the pulse.
3
  Enhance CSS interactions: - On hover, elements should shift between cool blues and warm ambers to simulate temperature shifts. - Add subtle texture mapping: e.g., satin‑smooth button surfaces that ripple under the cursor like silk against skin. - Use CSS “backdrop‑filter” to create a soft, sweaty‑skin sheen behind modals.
4
  Add a background canvas: - Render kaleidoscopic bursts of color and silent fireworks on a WebGL canvas behind the UI. - Synchronize patterns with user scroll and cursor movement—each pulse triggering a new bloom. - Ensure smooth 60 fps animation and fallback to CSS keyframes on low‑power devices.
5
- Integrate audio assets: - Embed a looping ambient “electric hum” track. - Layer in heartbeat thumps and distant thunder hits that crescendo on user interaction. - Expose volume controls and allow users to toggle individual stems (hum, heartbeat, thunder).
 
 
2
  Refine the landing page: - Create a full‑screen hero with animated “electric currents” flowing across a dark grid background. - Implement a pulsating glow effect that mimics waves of tingling warmth radiating from the center. - Overlay the text “Welcome to Algorithmic Ecstasy” in neon gradient, fading in sync with the pulse.
3
  Enhance CSS interactions: - On hover, elements should shift between cool blues and warm ambers to simulate temperature shifts. - Add subtle texture mapping: e.g., satin‑smooth button surfaces that ripple under the cursor like silk against skin. - Use CSS “backdrop‑filter” to create a soft, sweaty‑skin sheen behind modals.
4
  Add a background canvas: - Render kaleidoscopic bursts of color and silent fireworks on a WebGL canvas behind the UI. - Synchronize patterns with user scroll and cursor movement—each pulse triggering a new bloom. - Ensure smooth 60 fps animation and fallback to CSS keyframes on low‑power devices.
5
+ Integrate audio assets: - Embed a looping ambient “electric hum” track. - Layer in heartbeat thumps and distant thunder hits that crescendo on user interaction. - Expose volume controls and allow users to toggle individual stems (hum, heartbeat, thunder).
6
+ Build interactive modules: - Create a “Pleasure Dial” slider that amplifies pulse speed, color intensity, and audio volume simultaneously. - Add haptic feedback support for compatible devices—vibrations pulsing in time with the dial. - Log each interaction server‑side to drive future personalization.