Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions Gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,8 @@ gem 'devise'
gem 'letter_opener', group: :development
# Auto-link URLs in text
gem 'rinku'
# For Production mail sending
gem 'postmark-rails'
# For Resend mail sending
gem 'resend'

# Use Active Model has_secure_password [https://guides.rubyonrails.org/active_model_basics.html#securepassword]
# gem "bcrypt", "~> 3.1.7"
Expand Down
16 changes: 10 additions & 6 deletions Gemfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,7 @@ GEM
concurrent-ruby (1.3.5)
connection_pool (2.5.3)
crass (1.0.6)
csv (3.3.5)
date (3.4.1)
debug (1.11.0)
irb (~> 1.10)
Expand All @@ -122,6 +123,10 @@ GEM
raabro (~> 1.4)
globalid (1.2.1)
activesupport (>= 6.1)
httparty (0.23.1)
csv
mini_mime (>= 1.0.0)
multi_xml (>= 0.5.2)
i18n (1.14.7)
concurrent-ruby (~> 1.0)
importmap-rails (2.2.2)
Expand Down Expand Up @@ -170,6 +175,8 @@ GEM
mini_mime (1.1.5)
minitest (5.25.5)
msgpack (1.8.0)
multi_xml (0.7.2)
bigdecimal (~> 3.1)
net-imap (0.5.9)
date
net-protocol
Expand Down Expand Up @@ -208,11 +215,6 @@ GEM
pg (1.6.1-aarch64-linux-musl)
pg (1.6.1-x86_64-linux)
pg (1.6.1-x86_64-linux-musl)
postmark (1.25.1)
json
postmark-rails (0.22.1)
actionmailer (>= 3.0.0)
postmark (>= 1.21.3, < 2.0)
pp (0.6.2)
prettyprint
prettyprint (0.2.0)
Expand Down Expand Up @@ -274,6 +276,8 @@ GEM
regexp_parser (2.11.2)
reline (0.6.2)
io-console (~> 0.5)
resend (0.24.0)
httparty (>= 0.21.0)
responders (3.1.1)
actionpack (>= 5.2)
railties (>= 5.2)
Expand Down Expand Up @@ -402,10 +406,10 @@ DEPENDENCIES
kamal
letter_opener
pg (~> 1.1)
postmark-rails
propshaft
puma (>= 5.0)
rails (~> 8.0.2)
resend
rinku
rubocop-rails-omakase
selenium-webdriver
Expand Down
80 changes: 49 additions & 31 deletions app/views/layouts/application.html.erb
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
<!-- app/views/layouts/application.html.erb -->
<!DOCTYPE html>
<html>
<head>
Expand Down Expand Up @@ -77,43 +78,60 @@
</div>
</div>

<!-- PWA Script - Only load once -->
<script>
let deferredPrompt;
const installPrompt = document.getElementById('pwa-install-prompt');
const installBtn = document.getElementById('pwa-install-btn');
const dismissBtn = document.getElementById('pwa-dismiss-btn');

// Listen for install prompt
window.addEventListener('beforeinstallprompt', (e) => {
e.preventDefault();
deferredPrompt = e;
document.addEventListener('DOMContentLoaded', function() {
// Prevent multiple script execution
if (window.pwaScriptLoaded) return;
window.pwaScriptLoaded = true;

// Show custom install prompt
installPrompt.classList.remove('hidden');
});
let deferredPrompt;
const installPrompt = document.getElementById('pwa-install-prompt');
const installBtn = document.getElementById('pwa-install-btn');
const dismissBtn = document.getElementById('pwa-dismiss-btn');

// Handle install
installBtn.addEventListener('click', async () => {
if (deferredPrompt) {
deferredPrompt.prompt();
const { outcome } = await deferredPrompt.userChoice;
deferredPrompt = null;
installPrompt.classList.add('hidden');
// Listen for install prompt
window.addEventListener('beforeinstallprompt', (e) => {
e.preventDefault();
deferredPrompt = e;

// Show custom install prompt
if (installPrompt) {
installPrompt.classList.remove('hidden');
}
});

// Handle install
if (installBtn) {
installBtn.addEventListener('click', async () => {
if (deferredPrompt) {
deferredPrompt.prompt();
const { outcome } = await deferredPrompt.userChoice;
deferredPrompt = null;
if (installPrompt) {
installPrompt.classList.add('hidden');
}
}
});
}
});

// Handle dismiss
dismissBtn.addEventListener('click', () => {
installPrompt.classList.add('hidden');
deferredPrompt = null;
});
// Handle dismiss
if (dismissBtn) {
dismissBtn.addEventListener('click', () => {
if (installPrompt) {
installPrompt.classList.add('hidden');
}
deferredPrompt = null;
});
}

// Register service worker
if ('serviceWorker' in navigator) {
navigator.serviceWorker.register('/service-worker')
.then(registration => console.log('SW registered'))
.catch(error => console.log('SW failed'));
}
// Register service worker
if ('serviceWorker' in navigator) {
navigator.serviceWorker.register('/service-worker')
.then(registration => console.log('SW registered'))
.catch(error => console.log('SW failed'));
}
});
</script>
</body>
</html>
2 changes: 1 addition & 1 deletion config/deploy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ env:
secret:
- RAILS_MASTER_KEY
- QUICKDROP_DATABASE_PASSWORD
- POSTMARK_API_TOKEN
- RESEND_API_KEY
clear:
# Run the Solid Queue Supervisor inside the web server's Puma process to do jobs.
# When you start using multiple servers, you should split out job processing to a dedicated machine.
Expand Down
21 changes: 18 additions & 3 deletions config/environments/production.rb
Original file line number Diff line number Diff line change
Expand Up @@ -62,14 +62,29 @@
# config.action_mailer.raise_delivery_errors = false

# Set host to be used by links generated in mailer templates.
config.action_mailer.delivery_method = :postmark
config.action_mailer.postmark_settings = {
api_token: ENV['POSTMARK_API_TOKEN']
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
address: 'smtp.resend.com',
port: 587,
domain: 'quickdrop.sharecon.space',
user_name: 'resend',
password: ENV['RESEND_API_KEY'],
authentication: 'plain',
enable_starttls_auto: true
}
config.action_mailer.default_url_options = {
host: "quickdrop.sharecon.space",
protocol: 'https'
}
config.action_mailer.default_options = {
from: 'noreply@quickdrop.sharecon.space'
}

# Ensure URL helpers use correct host
Rails.application.routes.default_url_options = {
host: 'quickdrop.sharecon.space',
protocol: 'https'
}

# Specify outgoing SMTP server. Remember to add smtp/* credentials via rails credentials:edit.
# config.action_mailer.smtp_settings = {
Expand Down
Loading